関連記事
- 【#Assembler】結局x64のアセンブラでゴニョゴニョと書き始めたオイラはバカかっ!(爆 【2024年05月13日(月)】
- 【#VCPP #VisualStudio】VS2022のVC 64ビットコンパイルでインラインアセンブラが使えなくなってるぞー 【2024年05月10日(金)】
- 【#CPP】出先でC++にてライブラリの緊急実装!脳死したーキョムリすぎるー 【2024年01月15日(月)】
- 【C#】謎な改造アプリ,SIMD命令を導入して高速化しようか,思案中 【2023年11月14日(火)】
- 生成AI「仕事で利用」2割 正確性などに懸念(23/5/7) 【2023年05月07日(日)】
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[]でやらんとメモリリークするじ(汗