memcpy
gcc コンパイラを使用した x86_64 と Linux での速度。せいぜい同等Time to transfer 1 long * Number of longs
かそれ以上か。
質問する
1912 次
2 に答える
2
これは、関数の CRT 実装に完全に依存しています。コンパイラのソース コードを確認して、100% 確信できるはずです。
通常、マシンにとって効率的なブロックをコピーし、開始/終了アドレスの配置に応じて適切なエッジ ケース処理を実行するように最適化されています。長さとアラインメントを処理する必要があることを考えると、純粋なlong
コピーよりも高速になる可能性は低いですが (そのステートメントはプラットフォームによって異なります)、速度低下が実際のアプリケーションに顕著な違いをもたらす可能性も低いです。
于 2012-04-23T11:20:57.547 に答える
2
私の知る限り、x86 (32 ビットおよび 64 ビット) の可能な限り最速のコピーは、1 つの XMM レジスタのサイズである 16 バイト幅のデータ転送を使用します。これは、Intel の最適化マニュアルで推奨されている方法です。ただし、確実にするには、システム ライブラリを逆アセンブルして、使用するメソッドを確認する必要があります。
于 2012-04-23T11:54:38.523 に答える