問題タブ [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.
c - memmove と memcpy の違いは何ですか?
memmove
とはどう違いmemcpy
ますか?普段どちらをどのように使用していますか?
c - C での memmove の実装
memmove が C でどのように実装されているかを理解するのを手伝ってくれる人がいますか? 特別な条件が 1 つしかありません。
また、スタックの成長方法にも依存しますか?
c - メモリのオーバーラップはどのように発生し、どのように制御されますか?
memmoveについて読んでいるときに、MEMORY OVERLAPSを処理できることを読みましたが、2つの文字列間でメモリのオーバーラップがどのように発生するか、およびこの関数がメモリのブロックを正しくコピーする方法を理解できません。
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です。
c++ - 「バイト数」をゼロに設定してmemcpy()とmemmove()を呼び出すことはできますか?
memmove()
実際に移動/コピーするものがない場合、またはmemcpy()
エッジケースとしてケースを処理する必要がありますか?
または、チェックせずに関数を呼び出す必要があります
前のスニペットのチェックは必要ですか?
c - memcpy/memmoveの奇妙な振る舞い
memcpy / memmovestruct FOO foo
が、関数のsrcでも宛先でもないのポインタを変更するという問題があります。gdbの出力は次のとおりです。
前memmove(y,y_temp,size_y);
:
以降:
変数の定義は次のとおりです。
私はそれがmemcpy/moveのバグではないことを知っているので、私はヒントを探しています。私の側のプログラミングエラーがそれを引き起こした可能性があります。
ありがとう
c - memmoveの実装
スレッドを参照して:Cでのmemmove実装、 2つの異なる変数のメモリオーバーラップがある理由がわかりませんでしたか?つまり、これはコンパイラが同じ「共通スペース」を2つの異なる変数に割り当てる通常のシナリオであり、このような場合にコンパイラがこのポリシーを使用するのはなぜですか。
c - memcpy と C での割り当て - memmove にする必要がありますか?
この質問への回答で指摘されているように、コンパイラ (この場合は gcc-4.1.2、はい、古い、いいえ、変更できません) は、適切と思われる場所で構造体の割り当てを memcpy に置き換えることができます。
valgrind でいくつかのコードを実行していますが、memcpy のソース/宛先の重複に関する警告が表示されました。コードを見ると、次のように表示されます (言い換え):
gcc がその割り当てを に置き換えることを決定した場合memcpy
、ソースと宛先が重複するため、無効な呼び出しになります。
明らかに、割り当てステートメントfrob
を callに変更するとmemmove
、問題はなくなります。
しかし、これはコンパイラのバグですか、それともその代入ステートメントは何らかの理由で無効ですか?