c中的内存占用部分

时间:2015-06-06 01:57:47

标签: c memory

你可以解释一下当你在c中收集内存占用时这些部分的含义吗? 我可以看到.text是源代码,我认为.const和.data是全局数据和常量(但不太确定)和.bss是什么意思?

| .text    | .const    | .data     | .bss      |

3 个答案:

答案 0 :(得分:1)

您可以找到here的答案。这也涵盖了运行时管理的部分堆栈(这是原始答案)。

简而言之(延伸):

  • .bss用于声明为static且具有全局范围的未初始化变量。这实际上并不存储在文件中,而是在调用`main()之前的运行时保留和清除。
  • .data包含显式初始化变量。
  • .const包含const个已声明的对象。
  • .text是存储程序代码的地方。请注意,不是源代码,而是已编译的程序代码!

普通的“ELF”目标文件中还有许多其他部分包含调试信息等。

有关更多信息,请阅读有关目标文件格式的信息。其中使用最广泛的是ELF

答案 1 :(得分:0)

.bss是未初始化的static变量。

// foo ends up in bss (because it is not explicitly initialised)
// it's initial value is whatever the default 'zero' value for the type is.
static int foo;
// bar ends up in .data
// (because) it is initialised with the value 42. 
static int bar = 42;
// baz ends up in .const
// (because) it is initialised with a value (22) and the object is const.
// meaning that the value cannot be allowed to change, meaning the object
// can be safely mapped to read-only memory pages (if supported).
static const int baz = 22;
// code goes in .text:
int main() { return 0; }

答案 2 :(得分:0)

bssBlock Started by Symbol)存储零值初始化静态分配变量(包括globalstatic变量)。如果静态分配的初始化值不是0,例如:

int global = 5;

然后global将在data部分中分配。