当我创建一个小型Mac Mach-O可执行文件时;Hello World"例如,用C编写,由于对齐填充,它的大小约为48k。然而,与此同时,我可以在.bss部分定义100k的零es(例如,通过指定100k个字符的静态数组(,这只会给我在磁盘上的可执行文件添加几个字节。
我想知道为什么填充物(我想它只有在加载后才起作用(也不是"填充";包装的";以某种方式
您似乎不喜欢填充的作用:确保对象的大小满足约束,例如是特定数字的倍数。填充字节的值通常意义不大,但它们的存在是必不可少的。
对于分配给ELF(比如(.bss部分的对象,情况正好相反:它们的值很重要,但它们的大小不需要通过磁盘上的表示来反映。此外,这些对象的值只是通过将它们分配给.bss这一事实来确定的,因此,实际上,每个对象在二进制文件中相对于其内存表示的大小消耗O(1(空间。
附录:可以想象,可以设计一种携带压缩数据的二进制格式,这样这种填充确实在磁盘上被压缩了。人们只能猜测为什么这种格式不受欢迎,但我认为可以肯定的是,至少部分答案是,未压缩二进制格式的简单性和加载速度比压缩格式可以实现的相对少量的空间节省更受重视。