BSS段中的内存布局

时间:2015-07-25 07:01:55

标签: c memory memory-management

在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

1 个答案:

答案 0 :(得分:5)

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