関連記事
- ぎんゆぅ~さんの更新頻度が落ちているときは仕事炎上中(爆 【2025年01月09日(木)】
- 仕事が納まった,のか?一応,拘束解除命令が出たモルモルモル 【2024年12月27日(金)】
- さすがに激務すぎ,ワロタ! 【2024年12月25日(水)】
- 今週もひたすらモノ書き #JAVA 祭りがまだまだ続く そろそろC#を書かせろー 【2024年12月04日(水)】
- 【#Assembler】結局x64のアセンブラでゴニョゴニョと書き始めたオイラはバカかっ!(爆 【2024年05月13日(月)】
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[]でやらんとメモリリークするじ(汗