2015-07-10 53 views
0

疑问:执行程序期间的数据段

如果我们执行一个程序,以下是分配给该程序的内存类型。

          __________________ 
              |    | 
              |  stack  | 
              |    | 
              ------------------ 
              |    | 
              | <Un Allocated| 
              |  space> | 
              ------------------ 
              |    | 
              |    | 
              |  Heap  | 
              |    | 
              |    | 
              __________________ 
              |    | 
              |  data  | 
              __________________ 
              |  text  | 
              __________________ 

这里的数据段发挥了至关重要的作用。所有初始化的数据和未初始化的数据都存在于数据段中。但是,我不知道在数据段中存储数据的顺序。对于Ex,初始化数据,未初始化数据,只读和读取写入数据。我认为以上是数据段中存在的四种类型。

所以,数据的顺序将放在数据段中。就像第一次初始化数据的地址少于全部。接下来是未初始化的数据,其地址高于初始化数据的地址。

在此先感谢。

+1

ummmm..where是这里的编程问题吗? –

回答

0

无法预先确定数据段中全局变量的顺序 - 取决于链接器和编译器。通常,链接程序保留变量在链接目标文件中出现的顺序,但这并不是一个硬性要求(例如,链接程序可以首先放置double变量,最后放置char以节省所需的对齐字节)。

未初始化的全局数据通常出现在.bss段中,该段位于.data段之后(在您的图片中,“在其上方”,因为图片的较高部分=更大的地址)。 .bss段全部为零,只有其大小存储在可执行文件中。这样,我们不需要在二进制图像中存储长串零。