你可以解释一下当你在c中收集内存占用时这些部分的含义吗? 我可以看到.text是源代码,我认为.const和.data是全局数据和常量(但不太确定)和.bss是什么意思?
| .text | .const | .data | .bss |
答案 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)
bss
(Block Started by Symbol
)存储零值初始化静态分配变量(包括global
和static
变量)。如果静态分配的初始化值不是0
,例如:
int global = 5;
然后global
将在data
部分中分配。