関連記事
【memory leak】メモリーリーク発生...ドロドロドロ 【2025年10月27日(月)】- う~~忙しい!あ~~忙しい!! 【2025年09月24日(水)】
- 【#ChatGPT】ChatGPTのヤロー(怒 SJIS変換サンプルコード,嘘コード吐いてやがった.原因対応に2時間も悩んだぞー 【2025年02月22日(土)】
- ぎんゆぅ~さんの更新頻度が落ちているときは仕事炎上中(爆 【2025年01月09日(木)】
- 仕事が納まった,のか?一応,拘束解除命令が出たモルモルモル 【2024年12月27日(金)】
2006年10月06日 20時05分 旧ブログより
memcpy()の性能テスト VC++版
C#版はこちら
インテルコンパイラによるC++版はこちら
今、仕事で、画像処理なんぞをやっており
1メガを超える画像データを、あっちにコピー、こっちにコピーしたり
そのとき、登場するのが、memcpy()命令@C++言語
この実行速度が気になったので、ちょいと計測してみた
CPU : AMD Athlon64x2 3800+(2.0GHz)
Memory : 1GB
OS : Windows XP Pro
C++ : Visual Studio 2005(VC++ 8.0)
テストに使ったソースは、一番最後に。。。
| 画像データ2000回の memcpy()を実行 |
デバッグコンパイル | リリースコンパイル |
| DVサイズ 720 * 480 32ビットピクセル (1.3MB) |
2,766ミリ秒 (999,566 B/ms) |
2,719ミリ秒 (1,016,844 B/ms) |
| ハイビジョンサイズ 1280 * 960 32ビットピクセル (4.8MB) |
10,016ミリ秒 (981,469 B/ms) |
9,781ミリ秒 (1,005,050 B/ms) |
目いっぱい速くなってるねぇ。。。
って、ハイビジョンサイズだと、さすがに重いか
memcpy()の転送速度情報が、欲しい方へ、参考情報、ってことで。。。
//#define DUMMY_WIDTH 720
//#define DUMMY_HEIGHT 480
#define DUMMY_WIDTH 1280
#define DUMMY_HEIGHT 960
#define DUMMY_DEPTH 4
#define DUMMY_BUFLEN
(DUMMY_WIDTH * DUMMY_HEIGHT * DUMMY_DEPTH)
void CtestDlg::OnBnClickedButton1()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。
CStatic *lbl;
char stBuf[64];
CString st;
BYTE *buf1 = new BYTE [ DUMMY_BUFLEN];
BYTE *buf2 = new BYTE [ DUMMY_BUFLEN];
SYSTEMTIME stm;
GetSystemTime(&stm);
sprintf(stBuf,"%d_%d_%d_%d",
stm.wHour, stm.wMinute, stm.wSecond, stm.wMilliseconds);
st = stBuf;
lbl = (CStatic*)GetDlgItem(IDC_STATIC_LABEL1);
lbl->SetWindowTextW(st);
for(int i = 0; i < 2000; i++)
{
memcpy(buf1, buf2, DUMMY_BUFLEN);
}
GetSystemTime(&stm);
sprintf(stBuf,"%d_%d_%d_%d",
stm.wHour, stm.wMinute, stm.wSecond, stm.wMilliseconds);
st = stBuf;
lbl = (CStatic*)GetDlgItem(IDC_STATIC_LABEL2);
lbl->SetWindowTextW(st);
delete buf1;
delete buf2;
}


※城主本人より追記
あーーー 開放動作,バグってる(笑
BYTE配列の解放なんで
>>delete buf1;
>>delete buf2;
じゃなくて
>>delete[] buf1;
>>delete[] buf2;
BYTE配列なんでどっちでもええんじゃけど(BYTEはデストラクタを持ってない)
オブジェクト配列の解放は,delete[]でやらんとメモリリークするじ(汗