Linux 程序执行期间的数据段
疑问: 如果我们执行一个程序,下面是分配给该程序的内存类型Linux 程序执行期间的数据段,linux,unix,memory-management,data-segment,Linux,Unix,Memory Management,Data Segment,疑问: 如果我们执行一个程序,下面是分配给该程序的内存类型 __________________ | | | stack |
__________________
| |
| stack |
| |
------------------
| |
| <Un Allocated|
| space> |
------------------
| |
| |
| Heap |
| |
| |
__________________
| |
| data |
__________________
| text |
__________________
__________________
| |
|堆叠|
| |
------------------
| |
| |
------------------
| |
| |
|堆|
| |
| |
__________________
| |
|资料|
__________________
|正文|
__________________
在这里,数据段扮演着至关重要的角色。所有初始化数据和未初始化数据都存在于数据段中。但是,我不知道在数据段中存储数据的顺序。例如,初始化数据、未初始化数据、只读数据和读写数据。我认为以上是数据段中存在的四种类型
所以,数据将按什么顺序放置在数据段中。就像第一次初始化的数据,它的地址比所有的都少。第二个是未初始化的数据,它的地址比初始化数据的地址高
提前感谢。数据段中全局变量的顺序无法提前确定-这取决于链接器和编译器。通常,链接器会保留变量在链接对象文件中的显示顺序,但这不是一个硬性要求(例如,链接器可以将
double
变量放在第一位,将char
放在最后,以保留所需的对齐字节)
未初始化的全局数据通常出现在
.bss
段中,该段位于.data
段之后(在图片中,“在”它上面,因为图片的较高部分=较大的地址)。.bss
段全部为零,只有其大小存储在可执行文件中。这样,我们就不需要在二进制图像中存储长串的零。ummmm..这里的编程问题在哪里?