ページ 11

callocの速度

Posted: 2013年7月28日(日) 03:35
by ask
遅い遅いと言われるcallocの速度を調べたくてこんな検証コードを書いたんですが、
動かすと100MBが0.08秒程度で確保できる結果になりました。
自分の予想では10MBの確保でも0.2秒くらい(超適当)カクつくと思っていたので意外な結果です。
ヒープ領域の確保と初期化ってこんなに速いんです?
Windows 7 (32bit) VC++ 2010 (物理メモリ合計は3GB, 使用可能が1.2GB, 空きは0.7GB)

コード:

#include <stdio.h>
#include <time.h>
int main(void) {
clock_t start = clock();
free(calloc(1024 * 1024 * 100, 1));
printf("%dms\n", clock() - start);
return 0;
}

Re: callocの速度

Posted: 2013年7月28日(日) 07:31
by beatle
DDR3-800メモリの転送速度が6.4GB/sです。
callocはmallocした領域に初期値を書き込むだけですから、単純に計算すると100MBの初期値を転送する時間が0.015625秒。
メモリ確保も一回でまとめて確保していますのでそんなに時間はかからないでしょう。

0.08秒を速いと取るか遅いと取るかは人次第ですが、askさんの用途で0.08秒が十分な速さなら問題ないのでは。
(80ミリ秒もかかる、という見方もできるわけで。)

提示されたコードはC言語規格としては単にCPU経過時間を表示しているだけで、VC++でたまたまミリ秒になるだけですのでご注意ください。

Re: callocの速度

Posted: 2013年7月28日(日) 17:09
by ask
>比類なきプログラマーさん
なるほど。一秒間に数GBが当たり前の相場なんですね。
100MBの確保なんてそうそう行わないので個人的にはかなり満足できる結果です。
ご回答ありがとうございました。