Új hozzászólás Aktív témák

  • pmonitor

    aktív tag

    válasz sztanozs #16612 üzenetére

    >a felhasználói programok nagy részében a műveletek végrehajtási idejének nagy részét az IO-ra való várakozás tölti ki, nem a kalkuláció.

    Van a következő kód:
    #include <stdio.h>
    #include <Windows.h>
    #include <time.h>
    #include <sys/timeb.h>

    long timediff(struct timeb* start, struct timeb* end)
    {
    long seconds;
    seconds = (long)(end->time - start->time);
    start->millitm = end->millitm - start->millitm;
    if (0 > start->millitm) {
    start->millitm += 1000;
    seconds--;
    }
    return seconds;
    }

    int main()
    {
    struct timeb start, end;
    long seconds, seconds_1, seconds_2;
    int militm, militm_1, militm_2;
    int i, j;
    char ch[] = "abcdefghijklmnopqrstuvvxywz";
    DWORD sizewrit;
    BOOL ret;
    ftime(&start);
    for (i = 0; i < 10000; i++)
    {
    FILE* fp = fopen("d:\\b.txt", "w");
    for (j = 0; j < 100; j++)
    {
    fwrite(ch, sizeof(ch[0]), 27, fp);
    }
    fclose(fp);
    remove("d:\\b.txt");
    }
    ftime(&end);
    seconds = timediff(&start, &end);
    militm = start.millitm;
    ftime(&start);
    for (i = 0; i < 10000; i++)
    {
    HANDLE FileH = CreateFileA("d:\\a.txt", GENERIC_WRITE, 0, 0, CREATE_NEW, FILE_ATTRIBUTE_ARCHIVE, 0);
    for (j = 0; j < 100; j++)
    {
    WriteFile(FileH, ch, 27, &sizewrit, 0);
    }
    CloseHandle(FileH);
    DeleteFileA("d:\\a.txt");
    }
    ftime(&end);
    seconds_1 = timediff(&start, &end);
    militm_1 = start.millitm;
    printf("Eltelt ido(fwrite()): %ld.%03d masodperc\n", seconds, militm);
    printf("Eltelt ido(CreateFileA()): %ld.%03d masodperc\n", seconds_1, militm_1);
    return 0;
    }

    Itt pl. a C library jelentősen gyorsabb, mint a win api hívások. Pedig mindegyik a HW-n végez műveleteket. Az állításod szerint elvileg mindegy lenne, hogy melyik algó a gyorsabb/lassabb. De itt nem így van. Pedig a disk sebessége ugyanaz. A C függvények mégis "folyékonyabban beszélik a nyelvét".

    Mostanában a szabadidőmben elég sokat foglalkoztam a sebességgel. Arra jutottam, hogy egyáltalán nem lehet általánosságban kategorikusan kijelenteni vmit. Ha csak a C-t, és a library-t nézzük, akkor sem. Az egyiknél jelentősen gyorsabb, mint egy egyedi implementáció, másik esetben meg fordítva van. Ki tudja megmondani, hogy melyik van többségben?

    @Ispy #16621:
    Azért a játéknál többet érnek ezek a példák. Én pl. sokat tanultam belőlük. Talán a legfontosabb, hogy a mostanra majdnem NULL ASM tudásomat frissítettem. Ez önmagában is elég lenne. Ezen kívül megtudtam, hogy a C library-ban is vannak nagyon lassú megvalósítások(bár hogy mennyi, azt nem tudom) is. És még sok mindent...
    Ráadásul több esetben megtudtam, hogy bizonyos esetben melyik a hatékonyabb. Ezeket sztem. nem felejtem el, ugyanakkor "elmentettem". Így ha valamikor a hatékonyabb algóra van szükség, akkor elő tudom venni a tarsolyomból. Szóval számos gyakorlatban használható eredménye is volt.

    @sztanozs #16625:
    Kimondottan C területről nem tudok. De pl. a(z) (alkalmazás) szervereken elég sok számot kell konvertálni. És egy sűrün látogatott oldalon ez sokat jelenthet.

    http://www.bferi.hu/download.php ; http://bferi.hu/egyeb.php

Új hozzászólás Aktív témák