- C/C++の宿題片付けます 167代目
435 :デフォルトの名無しさん[sage]:2014/06/11(水) 12:37:51.24 ID:XYJSlMo0 - >>427
420=422です 勝手なオレオレ用語使ってしまってごめんなさい ポインタラッチ=ポインタをラッチ(保持)する=>>422の変更点1つ目 です(ラッチというとハードウェアの言葉だからソフトでは使わないかも) 1次元配列のほうが速いのは、時間を測った結果そっちのほうが速かったから ・・・というのは半分冗談半分ホントだけども ポインタのポインタだと、一つ目のポインタの中身を知るためにメモリアクセスし、その値が指す先に再度メモリアクセスして値を取得する (インデックス計算→メモリアクセス→インデックス計算→メモリアクセス) 1次元配列だと、インデックスの計算を複数回やった後に1度だけメモリアクセスする (インデックス計算→インデックス計算→メモリアクセス) この違いが後者のほうが速かったということ 基本的にはパイプライン処理してるプロセッサだとメモリアクセスはストールの原因になるので少ないほうが速い (x86ってCISC?だけどパイプライン処理してる?よね?あまり詳しくないです) 実際にはほかの要因もいろいろあるはずで、処理時間は最終的には計測してみるのが確実 >>434 UCHAR (*tmpgyou)[][DIM3]は宣言がややこしいですが、配列を指すただのポインタ変数です なので配列分の領域を持っているわけではないです 先頭アドレスを保持するためのポインタ変数として使ってるので意図通りですね
| - C/C++の宿題片付けます 167代目
445 :デフォルトの名無しさん[sage]:2014/06/11(水) 16:46:59.02 ID:XYJSlMo0 - >>429,443
ttp://codepad.org/kjLe88XM
|
|