gpt4 book ai didi

c - 全局变量如何存储在内存中?

转载 作者:太空宇宙 更新时间:2023-11-04 06:10:20 25 4
gpt4 key购买 nike

我的代码如下:

#include <stdio.h>
int g_a;
int g_b;
int g_c;

int main()
{
printf("Hello world\n");
return 0;
}

然后用 gcc 构建它

gcc -o global global.c

最后,我使用objdump 来查看全局变量的地址

objdump -t global

并查看结果:

00004020 g_b
00004024 g_a
00004028 g_c

为什么全局变量存储在上面的地址中?我的意思是全局变量应该按照 g_a, g_b, g_c 的顺序存储

最佳答案

global variables should be stored in order g_a, g_b, g_c

不,它们分配到内存的顺序绝不会影响它们是否可以被访问。

如果您希望它们按特定顺序排列,您可以通过将它们放入 struct 中并声明它来实现,例如:

#include <stdio.h>

typedef struct {
int g_a;
int g_b;
int g_c;
} tOrderGuaranteed;

tOrderGuaranteed myStruct;

int main()
{
printf("Hello world\n");
// Use 'myStruct.g_a' rather than 'g_a'.
return 0;
}

但是,如前所述,这似乎并没有给您带来多大好处,尤其是因为编译器可以在这些成员之间和之后随意插入它认为合适的填充。

如果您使用 g_b 访问该(原始非结构)变量,而不是像 *(&g_a+1) 这样的奇怪(未定义行为)变体,您的无论内存中的布局如何,代码都可以正常工作。

关于c - 全局变量如何存储在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58405571/

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