memmove实现

nam*_*ked 2 c memmove

在参考线程:C中的memmove实现时,我不明白为什么2个不同的变量会有内存重叠?即这是一个正常情形,编译器为2个不同的变量分配相同的"公共空间",为什么编译器在这种情况下使用这个策略?

Oli*_*rth 10

与编译器无关.考虑以下:

int x[100];

memmove(&x[1], &x[0], 99*sizeof(int));
Run Code Online (Sandbox Code Playgroud)


Jer*_*fin 6

这并不是关于编译器创建重叠的变量.memmove即使源和目的地重叠,它只是说它必须工作的规范.如果两个重叠的可能性不大,你通常想要使用memcpy,这通常会更快,但如果它们重叠,则会给出未定义的行为.