スレッドを参照して:Cでのmemmove実装、 2つの異なる変数のメモリオーバーラップがある理由がわかりませんでしたか?つまり、これはコンパイラが同じ「共通スペース」を2つの異なる変数に割り当てる通常のシナリオであり、このような場合にコンパイラがこのポリシーを使用するのはなぜですか。
質問する
1237 次
2 に答える
10
コンパイラとは何の関係もありません。次のことを考慮してください。
int x[100];
memmove(&x[1], &x[0], 99*sizeof(int));
于 2011-02-19T23:54:12.613 に答える
6
オーバーラップする変数を作成するコンパイラについてではありません。memmove
ソースと宛先が重複していても、 の仕様が機能しなければならないと言っているだけです。2 つがオーバーラップする可能性がない場合は、通常は を使用しますmemcpy
。通常は高速ですが、オーバーラップすると未定義の動作が発生します。
于 2011-02-20T00:07:48.783 に答える