在参考线程:memmove implementation in C时,我不明白为什么2个不同的变量会有内存重叠?即这是一个正常情况,编译器为2个不同的变量分配相同的“公共空间”,为什么编译器在这种情况下使用这个策略?
答案 0 :(得分:9)
与编译器无关。请考虑以下事项:
int x[100];
memmove(&x[1], &x[0], 99*sizeof(int));
答案 1 :(得分:5)
这并不是关于编译器创建重叠的变量。只是memmove
的规范说它必须工作,即使源和目的地重叠。如果两者没有重叠的可能性,通常需要使用memcpy
,这通常会更快,但如果它们重叠则会给出未定义的行为。