【发布时间】:2011-02-19 23:51:27
【问题描述】:
参考线程:memmove implementation in C,我不明白为什么 2 个不同的变量会有内存重叠?即编译器将相同的“公共空间”分配给 2 个不同的变量是正常情况吗?为什么编译器在这种情况下使用此策略?
【问题讨论】:
参考线程:memmove implementation in C,我不明白为什么 2 个不同的变量会有内存重叠?即编译器将相同的“公共空间”分配给 2 个不同的变量是正常情况吗?为什么编译器在这种情况下使用此策略?
【问题讨论】:
与编译器无关。考虑以下几点:
int x[100];
memmove(&x[1], &x[0], 99*sizeof(int));
【讨论】:
这并不是关于编译器创建重叠的变量。只是memmove 的规范说它必须工作,即使源和目标重叠。如果两者没有重叠的机会,您通常希望使用memcpy,这通常会更快,但如果它们重叠,则会给出未定义的行为。
【讨论】: