その結果、Javaで1バイトの文字列を結合処理してからディスクに書き込んだ場合、ディスクへの直接書き込みと比べて約9,000倍の時間がかかったという。
http://developers.slashdot.jp/story/15/03/28/0747218/
元記事の Java コードを読みました。C 言語的には下記のようなことでしょうね。Cygwin で計測したらディスク版の方が断然速いですが、さすがにコードが意地悪すぎるかな。何事もケースバイケースだと思います。
#include <stdio.h> #include <stdlib.h> #define MAX 1000000 /* メモリー版 */ void memory() { unsigned char* ptr; size_t i; FILE* f; ptr = NULL; for (i = 0; i < MAX; i++) { ptr = realloc(ptr, i + 1); ptr[i] = '1'; } f = fopen("tstm", "wb"); fwrite(ptr, 1, MAX, f); fclose(f); free(ptr); } /* ディスク版 */ void disk() { unsigned char buf[8196]; FILE* f; size_t i, c; f = fopen("tstd", "wb"); for (i = 0, c = 0; i < MAX; i++, c++) { if (c == sizeof(buf)) { fwrite(buf, 1, c, f); c = 0; } buf[c] = '1'; } fwrite(buf, 1, c, f); fclose(f); } /* 計測 */ #include <time.h> #define COUNT 1 int main() { clock_t p, m, d; size_t i; p = clock(); for (i = 0; i < COUNT; i++) { memory(); } m = clock() - p; p = clock(); for (i = 0; i < COUNT; i++) { disk(); } d = clock() - p; printf("memory = %.2f ms\n", (double) m / CLOCKS_PER_SEC * 1000); printf("disk = %.2f ms\n", (double) d / CLOCKS_PER_SEC * 1000); return 0; }