質問

memcpysが最新のINTEL / AMDハードウェアでの割り当てよりも優れているのはどのような状況ですか? 32ビットIntelプラットフォームでGCC 4.2.xを使用しています(64ビットにも興味があります)。

役に立ちましたか?

解決

割り当てよりも優れていることを期待しないでください。その理由は、コンパイラーは(最適化フラグを使用する場合)より高速であると考える場合に、とにかくmemcpyを使用するからです。そうでない場合、および構造がレジスタに収まるほど合理的である場合、メモリアクセスをまったく必要としない直接レジスタ操作を使用できます。

GCCには、レジスタ/メモリセルを直接変更するタイミング、またはmemcpy関数を使用するタイミングを把握する特別なブロック移動パターンが内部にあります。構造体を割り当てるとき、コンパイラーはコンパイル時に移動の大きさを知っているため、たとえば小さなコピーを展開することができます(ループの代わりにn回行を移動します)。注 -mno-memcpy

-mmemcpy
-mno-memcpy
    Force (do not force) the use of "memcpy()" for non-trivial block moves.  
    The default is -mno-memcpy, which allows GCC to inline most constant-sized copies.

コンパイラーよりもmemcpyを使用する方がよいのは誰ですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top