najszybsze funckje wejścia/wyjścia

0

Witam,
mam pytanie, jak można się domyślić z tematu dotyczy najszybszych funkcji wejścia/wyjścia. Chodzi mi tutaj o funkcje szybsze od sprintf, scanf i cin, cout. Tylko błagam nie chcę tu zdań: po co Ci i tak nie zobaczysz różnicy.

0

Możesz całe wejście wciągać za pomocą fread() i wypisywać fwrite()

0

rozumiem, że męczysz SPOJ-a i trafiłeś na zadanie, gdzie wczytywanie danych staje się głównym przyczynkiem do czasu wykonania.
Niestety to jest największa wada SPOJ-a.

Tu masz przykład jak ja sobie radzę z tym problemem:

    char buff[64];
    char result[] = "0";
    char *p;
    int testCount;

    gets(buff);
    testCount = strtol(buff, &p, 10);

    for (int i=0; i < testCount; ++i) {
        gets(buff);
        int day = strtol(buff, &p, 10)-1;
        int a = strtol(p, &p, 10)%10;
        int b = strtol(p, &p, 10)%10;
        result[0] = '0' + moduloFibAB(day, a, b);
        puts(result);
    }
0

puts(), fputs(), gets(). Ale trzeba uwazac, bo nie robia zadnych checkow, wiec latwo o przepelnienie bufora etc. No i nie oferuja zadneego formatowania wyjscia/wejscia, operuja tylko na raw stringach.

0

Znaj łaskę Pana.
http://ideone.com/VSg4G

0

Zależy do czego potrzebujesz to we/wy. Jeśli do plików, to najszybsze będzie mmap odpowiednio wsparte madvise, ale stosuje się je inaczej niż zwykłe strumienie we/wy. Ale to raczej jeśli piszesz soft bazodanowy, a nie do czytania jakiś drobiazgów typu konfiguracja. Do innych rzeczy najszybsze będą niskopoziomowe operacje takie jak posix read / write, bo one ograniczają się tylko do przekopiowania surowych danych do/z podanego bufora. Wszelkie rzeczy takie jak printf / scanf / cin / cout itp. są dość powolne, bo robią znacznie więcej (formatowanie, tokenizacja, itp.).

Podstawowa sprawa przy szybkim we/wy, niezależnie jakich funkcji użycjesz, to czytać dużymi paczkami, w praktyce przynajmniej 64 kB. Jak będziesz czytał po bajcie, to faktycznie możesz zajechać CPU samym wczytywaniem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1