簡體   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