疑问:
如果我们执行一个程序,以下是分配给该程序的内存类型。
__________________
| |
| stack |
| |
------------------
| |
| <Un Allocated|
| space> |
------------------
| |
| |
| Heap |
| |
| |
__________________
| |
| data |
__________________
| text |
__________________
这里数据段起着至关重要的作用。所有已初始化的数据和未初始化的数据都存在于数据段中。但是,我不知道数据段中数据的存储顺序。对于Ex,初始化数据、未初始化数据、只读和读写数据。我认为以上是数据段中存在的四种类型。
所以,数据将按照什么顺序放置在数据段中。就像地址小于全部的第一个初始化数据一样。接下来是未初始化的数据,其地址比初始化的数据高。
提前致谢。
最佳答案
数据段中全局变量的顺序无法提前确定 - 这取决于您的链接器和编译器。通常,链接器会保留变量在链接的目标文件中出现的顺序,但这不是硬性要求(例如,链接器可以将 double
变量放在前面,将 char
放在最后,以保留所需的对齐字节)。
未初始化的全局数据通常存在于 .bss
段中,该段位于 .data
段之后(在您的图片中,位于其“上方”,因为图片的较高部分=较大的地址)。 .bss
段全为零,仅其大小存储在可执行文件中。这样,我们就不需要在二进制图像中存储长串零。
关于linux - 程序执行期间的数据段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31335070/