【发布时间】:2015-07-25 07:01:54
【问题描述】:
在一个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。
顺便说一句,gcc 版本是 4.4.7
【问题讨论】:
-
可能是元数据。您认为链接器应该如何解析全局名称?
-
我会说它正在添加填充。我注意到如果你添加另一个全局,所以总共有两个,bss 大小保持不变,然后你添加另一个,它又跳了 8 .
-
是的,你是对的!但是这样做的目的是什么?为什么它不简单地跳 4 跳 4?
-
机器是 64 位的(不管这意味着什么)的细节足以保证对这个问题的特定是/否回答......因为不可能运行 32 - 64 位机器上的位操作系统!
标签: c memory memory-management