繁体   English   中英

memory中的全局变量是如何存储的?

[英]How are global variables stored in memory?

我有如下代码:

#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 的顺序存储

全局变量应按 g_a、g_b、g_c 的顺序存储

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

如果您希望它们按特定顺序排列,您可以通过将它们放在一个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)这样的奇怪(未定义行为)变体,那么无论 memory 中的布局如何,您的代码都可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM