【问题标题】:Data segment during execution of program程序执行期间的数据段
【发布时间】:2015-07-10 07:35:45
【问题描述】:

怀疑:

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

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

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

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

提前致谢。

【问题讨论】:

  • ummmm..这里的编程问题在哪里?

标签: linux unix memory-management data-segment


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多