c程序的内存布局

c程序的内存布局,c,C,我在读这篇文章,, 上面写着“未初始化变量存储在bss中”,“初始化变量存储在数据段中” 我的问题是为什么我们需要两个独立的变量段?1.BSS 2。数据段 为什么不把所有内容都放在一个片段中呢?BSS在程序映像中不占用任何空间。它只是指示BSS部分有多大,运行时会将该内存设置为零 数据部分充满了变量的初始值,因此它在程序映像文件中占用了空间。据我所知,未初始化的变量(in.bss)在进入程序时会(或应该)归零。初始化变量(.data)获取特定值 这意味着在程序的可执行文件(存储在磁盘上)中,.d

我在读这篇文章,, 上面写着“未初始化变量存储在bss中”,“初始化变量存储在数据段中”

我的问题是为什么我们需要两个独立的变量段?1.BSS 2。数据段


为什么不把所有内容都放在一个片段中呢?

BSS在程序映像中不占用任何空间。它只是指示BSS部分有多大,运行时会将该内存设置为零


数据部分充满了变量的初始值,因此它在程序映像文件中占用了空间。

据我所知,未初始化的变量(in.bss)在进入程序时会(或应该)归零。初始化变量(.data)获取特定值

这意味着在程序的可执行文件(存储在磁盘上)中,.data段必须包含在每个字节中(因为每个变量的值可能不同)。但是,不能按字节保存.bss。加载可执行文件时,必须只知道要在内存中保留的大小。程序知道.bss中每个变量的偏移量

要将所有未初始化的变量归零,可以使用一些汇编指令(例如,对于x86:rep stosw和一些寄存器设置)

结论:.data的加载和初始化时间比大的.bss段要差得多,因为.data必须从磁盘加载,并且.bss只能在运行时保留很少的cpu指令