問題タブ [memmove]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
9 に答える
95418 参照

c - memmove と memcpy の違いは何ですか?

memmoveとはどう違いmemcpyますか?普段どちらをどのように使用していますか?

0 投票する
3 に答える
15811 参照

c - C での memmove の実装

memmove が C でどのように実装されているかを理解するのを手伝ってくれる人がいますか? 特別な条件が 1 つしかありません。

また、スタックの成長方法にも依存しますか?

0 投票する
2 に答える
8438 参照

c - メモリのオーバーラップはどのように発生し、どのように制御されますか?

memmoveについて読んでいるときに、MEMORY OVERLAPSを処理できることを読みましたが、2つの文字列間でメモリのオーバーラップがどのように発生するか、およびこの関数がメモリのブロックを正しくコピーする方法を理解できません。

0 投票する
7 に答える
4403 参照

c++ - memcpy()がmemmove()よりも速い場合、実際に重要なケースは何ですか?

との主な違いmemcpy()、送信元と宛先が重複している場合に正常に機能するmemmove()ことです。memmove()バッファが確実にオーバーラップしない場合は、 memcpy()の方が高速である可能性があるため、望ましいです。

私を悩ませているのは、これが潜在的にです。それはマイクロ最適化ですか、それとも、どこにでも固執するのではなく、memcpy()実際に使用する必要があるように、より高速である場合の実際の重要な例がありますか?memcpy()memmove()

0 投票する
2 に答える
644 参照

optimization - x86 および +1 シフトの高速 memmove (Move-to-front 変換用)

高速な MTF ( http://en.wikipedia.org/wiki/Move-to-front_transform ) の場合、文字を配列内から配列の前に移動する高速バージョンが必要です。

cachegrind が示しているように、memmove では多くの分岐予測ミスが発生しています。

他のバージョンのコード (最初の例の memmove ではなく、これ)

多くのバイト読み取り/書き込み、条件付き分岐、分岐予測ミスがあります

i は、「適切な」入力に使用される MTF であるため、それほど大きくはありません。BWT (Burrows–Wheeler 変換) 後のテキスト ファイルです。

コンパイラはGCCです。

0 投票する
2 に答える
42229 参照

c++ - 「バイト数」をゼロに設定してmemcpy()とmemmove()を呼び出すことはできますか?

memmove()実際に移動/コピーするものがない場合、またはmemcpy()エッジケースとしてケースを処理する必要がありますか?

または、チェックせずに関数を呼び出す必要があります

前のスニペットのチェックは必要ですか?

0 投票する
2 に答える
823 参照

c - memcpy/memmoveの奇妙な振る舞い

memcpy / memmovestruct FOO fooが、関数のsrcでも宛先でもないのポインタを変更するという問題があります。gdbの出力は次のとおりです。

memmove(y,y_temp,size_y);

以降:

変数の定義は次のとおりです。

私はそれがmemcpy/moveのバグではないことを知っているので、私はヒントを探しています。私の側のプログラミングエラーがそれを引き起こした可能性があります。

ありがとう

0 投票する
11 に答える
183858 参照

c - memcpy() と memmove()

memcpy()との違いを理解しようとしていますが、重複するソースと宛先を処理しないmemmove()テキストを読みました。memcpy()memmove()

ただし、重複するメモリ ブロックでこれら 2 つの関数を実行すると、どちらも同じ結果になります。たとえば、memmove()ヘルプ ページにある次の MSDN の例を見てください。

の欠点とmemcpyそれをどのようmemmoveに解決するかを理解するためのより良い例はありますか?

出力:

0 投票する
2 に答える
1237 参照

c - memmoveの実装

スレッドを参照して:Cでのmemmove実装、 2つの異なる変数のメモリオーバーラップがある理由がわかりませんでしたか?つまり、これはコンパイラが同じ「共通スペース」を2つの異なる変数に割り当てる通常のシナリオであり、このような場合にコンパイラがこのポリシーを使用するのはなぜですか。

0 投票する
3 に答える
2786 参照

c - memcpy と C での割り当て - memmove にする必要がありますか?

この質問への回答で指摘されているように、コンパイラ (この場合は gcc-4.1.2、はい、古い、いいえ、変更できません) は、適切と思われる場所で構造体の割り当てを memcpy に置き換えることができます。

valgrind でいくつかのコードを実行していますが、memcpy のソース/宛先の重複に関する警告が表示されました。コードを見ると、次のように表示されます (言い換え):

gcc がその割り当てを に置き換えることを決定した場合memcpy、ソースと宛先が重複するため、無効な呼び出しになります。

明らかに、割り当てステートメントfrobを callに変更するとmemmove、問題はなくなります。

しかし、これはコンパイラのバグですか、それともその代入ステートメントは何らかの理由で無効ですか?