我有一个问题要澄清我对C ++中计算机内存组织的困惑。
在C ++中,不同的数据放在不同的位置。我的理解是这样的。
1)数据段部分,其中包含全局和静态数据;
2)堆部分,由新
创建的对象3)堆栈部分,局部变量
4)文本部分,代码本身。
是吗?有什么我错过或做错了吗?
谢谢!
答案 0 :(得分:3)
Here is a guide可能会有所帮助。
答案 1 :(得分:1)
通常至少有两个数据部分。一个用初始化的全局变量,另一个没有(BSS)。堆栈部分通常不会在二进制文件中发出。
当然,如果你没有指定实现,这些特定于实现的问题是没用的。
答案 2 :(得分:1)
这个问题让我想起了......这就是:http://www.gotw.ca/gotw/009.htm
答案 3 :(得分:1)
我写了一篇名为“C++ Internals :: Memory Layout”的文章,它将为您澄清这一点。
文章摘录:
.text segment
这是只读,固定大小的细分。
文本段,即a.k.a。代码段,包含编译器和汇编器提供的可执行指令。
.data segment
这是一个读写,固定大小的细分。
数据段,即a.k.a。初始化数据段,包含已初始化的:
- 全局变量(包括全局静态变量)
- 静态局部变量。
段的大小取决于源代码中值的大小,这些值可以在运行时更改。
.rdata/.rodata segment
这是只读段
段包含静态未命名数据(如字符串常量)
.bss segment
这是一个读写并且与.data段相邻。
BSS段,a.k.a。未初始化的数据段,包含静态分配的(全局和静态)变量,仅在程序启动时由零值位表示。 BSS代表符号块启动,这是一种伪操作,存在于为IBM开发的非常旧的汇编程序中。
heap
& stack
你是对的。无论如何,如果你想查看一些例子并仔细看看,请参阅上面提到的文章。