今天看到了一个有意思的问题。
之前只知道非初始化的 static和global变量在.bss,初始化的在.data。没想到这个对二进制文件大小也有影响。在这里记录一下。
先来看一下二进制文件结构。下面的图摘自 《程序员的自我修养 :链接装载与库》
正如我之前说的。未初始化的static和global变量存在.bss段,初始化的static与global变量存在.data段。但是这样会对程序大小有什么影响呢?其实在.bss段没有初始化的变量都会被视为空值,由于都是空值也就没有必要占用文件大小的大小了。只需要在文件load的时候分配好对应的空间再赋初值就完事了,因此bss段只会记录一个需要的空间大小,这里就是2048 * 4字节。而初始化过的变量则需要记录相关的信息,因此初始化过的static变量需要占用相关空间,因此这2048个变量会增加文件的大小。值得注意的是如果初始化为0,这个时候变量也会存在bss段。