2

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

4

2 に答える 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 に答える