C memmove实现

C memmove实现,c,memmove,C,Memmove,关于线程:,我不明白为什么两个不同的变量会有内存重叠?i、 e.编译器将相同的“公共空间”分配给两个不同的变量,这是正常情况吗?为什么编译器在这种情况下使用此策略?与编译器无关。考虑以下事项: int x[100]; memmove(&x[1], &x[0], 99*sizeof(int)); 这与编译器创建重叠的变量无关。很简单,memmove的规范说它必须工作,即使源和目标重叠。如果这两个对象不可能重叠,通常需要使用memcpy,这通常会更快,但如果它们重叠,则会给出未定

关于线程:,我不明白为什么两个不同的变量会有内存重叠?i、 e.编译器将相同的“公共空间”分配给两个不同的变量,这是正常情况吗?为什么编译器在这种情况下使用此策略?

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

int x[100];

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

这与编译器创建重叠的变量无关。很简单,
memmove
的规范说它必须工作,即使源和目标重叠。如果这两个对象不可能重叠,通常需要使用
memcpy
,这通常会更快,但如果它们重叠,则会给出未定义的行为