为什么我的已编译(小型)objective-C文件中的一半是一大块零?
时间:2020-03-06 14:50:48 来源:igfitidea点击:
我在文本编辑器中打开了已编译的Hello World Obj-C应用程序,令我惊讶的是,发现了大约8 KB的00 00 00 00 00 00 00 00...。
为什么这些在这里?有没有办法清除这些零(我怀疑这些零的功能太多了)?
显然,在此文件中它并不是那么重要,因为它开始时只有16kB,但无论如何我还是想知道。
解决方案
Objective-C是否支持增量链接?那可以解释为什么会有大量的填充空间。
一些编译器或者链接器需要文件大小的整数。我们可以看到,当我们添加一些代码时,文件大小并没有增加。我想那是我们所看到的零。
它最有可能在代码,数据,重定位或者我们使用的可执行格式的其他部分之间进行填充。
链接器喜欢在4k或者8k边界上填充这些部分。这会以一些内存浪费为代价来缩短加载时间。
对于一个简单的hello世界来说,这很重要,但是对于一个大型应用程序,用于填充的额外内存是可忽略的。
也许这是一个静态变量?我知道在许多类似C的语言中,声明为static的变量的初始值嵌入在编译器发出的代码中。在运行时,此初始值将映射到进程的内存。也许我们(或者我们要包含或者链接的某些代码)定义了一个8 KB的零初始化数组。