アカウント名:
パスワード:
ディスク書き込みにBufferedWriterクラスを使ってました。なのでJava版に関しては「直接ディスクに書き込んでいる」わけではありません。
C 言語的にいうとこんな感じでしょうか。だとすれば後者の方が断然速いですね。(ちょっとコードが意地悪かな)
#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[8096]; 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);}
それ以上に元のコードは意地悪だけどね。reallocはmallocに変えて毎回サイズを増やした領域を確保し、前の領域を解放、を繰り返すくらいやらないと元のコードと同等にはならない。
8096って一体どこから出てきたのか(2の累乗にしたいのなら8192)
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ソースを見ろ -- ある4桁UID
Java版のコード見たら (スコア:5, すばらしい洞察)
ディスク書き込みにBufferedWriterクラスを使ってました。なのでJava版に関しては「直接ディスクに書き込んでいる」わけではありません。
Re:Java版のコード見たら (スコア:3, 参考になる)
C 言語的にいうとこんな感じでしょうか。だとすれば後者の方が断然速いですね。(ちょっとコードが意地悪かな)
#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[8096];
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);
}
Re: (スコア:0)
それ以上に元のコードは意地悪だけどね。
reallocはmallocに変えて毎回サイズを増やした領域を確保し、前の領域を解放、を繰り返すくらいやらないと元のコードと同等にはならない。
Re: (スコア:0)
8096って一体どこから出てきたのか(2の累乗にしたいのなら8192)
Re: (スコア:0)