gpt4 book ai didi

c - x64 与 x86 中的内存处理 - C 语言

转载 作者:太空宇宙 更新时间:2023-11-04 05:33:09 27 4
gpt4 key购买 nike

当我在 X64 计算机上使用 GCC 编译器运行下面的代码时,i 的输出是 90,但是在 x86 上运行它时,它的值仍然是 2,那么在处理内存方面有何不同?

#include <stdio.h>

int main(void)
{
int arr[3]={50,7,30};
int i=2;

arr[3]=90;
printf("arr[2]=%d,arr[3]=%d,i=%d", arr[2], arr[3], i);

return 0;
}

最佳答案

C 中的数组索引从 0 开始,因此 arr 的有效索引为 0、1 和 2。使用 arr[3] 是注销结尾阵列。这样做会调用 undefined behavior ,在您的情况下表现为 x86 和 x64 上的不同行为。如果使用不同的编译器或更改优化设置,您可能还会得到不同的行为。

关于这个特定的行为,您似乎认为 i 应该紧跟在内存中的 arr 之后,以便写入 arr[3]实际上写入 i。但是,对于范围内局部变量的顺序并不能保证。这不仅仅是 x86/x64 的事情。

不要读取/写入超过数组末尾的内容,这样您就不会看到这些类型的问题。

关于c - x64 与 x86 中的内存处理 - C 语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53071019/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com