Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 程序执行期间的数据段_Linux_Unix_Memory Management_Data Segment - Fatal编程技术网

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..这里的编程问题在哪里?