我知道BSS段存储未初始化的全局和静态变量并将它们初始化为零。但是如果全局/静态变量被初始化并且我的第二个问题是我读到BSS段不消耗内存,那么它存储这些变量的地方怎么办?感谢
答案 0 :(得分:7)
您可能已经读过BSS段不占用磁盘上可执行文件中的空间。加载可执行文件时,BSS段肯定 消耗内存空间。 OS装载器分配空间并初始化为零。
答案 1 :(得分:2)
如果已初始化,则全局/静态变量存储在.DATA段中。在.DATA段中声明数据时,您需要为该数据提供值,因此必须将其存储为可执行文件的一部分。
另一方面,您只需要声明.BSS需要多少数据,因为您不需要知道这些值是什么。因此,如果您的程序声明了2 GB的未初始化内存,那2 GB对可执行文件的大小没有贡献,那么在加载它之后才会看到它。