BSS段中的内存布局

问题描述 投票:0回答:1

在64位机器中,我编写了一个简单的C程序,如下所示:

#include <stdio.h>
int main(int argc,char* argv[])
{
    printf("Hello,world!\n");
    return 0;
}

然后gcc hello.c -o hello,size hello,我得到了:

    text       data     bss     dec     hex filename
    1156        492      16    1664     680 hello

接下来,我在源代码中添加一个全局int变量:

#include <stdio.h>
int global;
int main(int argc,char* argv[])
{
    printf("Hello,world!\n");
    return 0;
}

再次编译和大小,我得到:

    text       data     bss     dec     hex filename
    1156        492      24    1672     688 hello

所以,问题是,bss段增加了8个字节,但为什么呢?只添加了一个int变量global。那应该是4。

BTW,gcc版本是4.4.7

c memory memory-management
1个回答
5
投票

段大小向上舍入到8的下一个倍数,因此跟随它的任何内容都将在64位边界上对齐。无论如何,将它归零的启动例程将使用64位存储。

© www.soinside.com 2019 - 2024. All rights reserved.