【发布时间】:2014-02-03 12:38:46
【问题描述】:
我正在使用一个测试程序来理解内核版本为 2.6.32-279.el6.x86_64 的 linux 6.3 上的 C 内存模型。
首先我编译了下面的代码,
#include <stdio.h>
int main(void)
{
static int i = 100; /* Initialized static variable stored in DS*/
return 0;
}
在运行 size 命令时,我得到了下面,
[root@rachitjain jan14]# size a.out
text data bss dec hex filename
1040 488 16 1544 608 a.out
然后,删除静态变量 'i' 的初始化后,我的代码变成了,
include <stdio.h>
int main(void)
{
static int i ;
return 0;
}
上面编译后运行大小,
[root@rachitjain jan14]# size a.out
text data bss dec hex filename
1040 484 24 1548 60c a.out
bss 部分增加了 8 个字节,而数据部分只减少了 4 个字节。为什么在移动到 bss 段时大小是整数?
我也测试过这个角色和浮动,观察到相同的行为。
【问题讨论】:
-
您可能想仔细查看目标文件、生成的汇编代码和链接器脚本,可能还有编译器和/或链接器源代码(如果使用例如 clang/GCC 和 GNU ld)。
标签: c linux memory-management operating-system