0

怀疑:

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

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

在这里,数据段起着至关重要的作用。所有已初始化的数据和未初始化的数据都存在于数据段中。但是,我不知道数据段中数据的存储顺序。例如,初始化数据、未初始化数据、只读数据和读写数据。我认为以上是数据段中存在的四种类型。

所以,数据将按什么顺序放置在数据段中。就像地址少于所有的第一个初始化数据一样。接下来是未初始化的数据,它们的地址比初始化的数据高。

提前致谢。

4

1 回答 1

0

数据段中全局变量的顺序不能提前确定——这取决于你的链接器和编译器。通常,链接器保留变量在链接目标文件中出现的顺序,但这不是硬性要求(例如,链接器可以将double变量放在首位和char最后以保存所需的对齐字节)。

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

于 2015-07-10T07:56:54.747 回答