在参考线程:C中的memmove实现时,我不明白为什么2个不同的变量会有内存重叠?即这是一个正常情形,编译器为2个不同的变量分配相同的"公共空间",为什么编译器在这种情况下使用这个策略?
Oli*_*rth 10
与编译器无关.考虑以下:
int x[100];
memmove(&x[1], &x[0], 99*sizeof(int));
Run Code Online (Sandbox Code Playgroud)
这并不是关于编译器创建重叠的变量.memmove即使源和目的地重叠,它只是说它必须工作的规范.如果两个重叠的可能性不大,你通常想要使用memcpy,这通常会更快,但如果它们重叠,则会给出未定义的行为.
| 归档时间: |
|
| 查看次数: |
1180 次 |
| 最近记录: |