callocの速度

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ask

callocの速度

#1

投稿記事 by ask » 10年前

遅い遅いと言われる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;
}

beatle
記事: 1281
登録日時: 12年前
住所: 埼玉
連絡を取る:

Re: callocの速度

#2

投稿記事 by beatle » 10年前

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

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

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

ask

Re: callocの速度

#3

投稿記事 by ask » 10年前

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

閉鎖

“C言語何でも質問掲示板” へ戻る