memmove实现

时间:2011-02-19 23:51:28

标签: c memmove

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

2 个答案:

答案 0 :(得分:9)

与编译器无关。请考虑以下事项:

int x[100];

memmove(&x[1], &x[0], 99*sizeof(int));

答案 1 :(得分:5)

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