C 什么';在对象文件中是否需要.bss节?
Wikipedia提到,C 什么';在对象文件中是否需要.bss节?,c,compiler-construction,linker,abi,C,Compiler Construction,Linker,Abi,Wikipedia提到,.bss部分在对象文件中没有实际占用空间,我确实在objdump信息中找到了一个大小为0的.bss条目。所以问题是,在一个对象文件中存在这样一个空部分有什么必要 为什么不能将.bss仅添加到可执行文件中,而不是同时添加到.o和a.out文件中,就像.rel仅显示在对象文件中一样 更新:我想我误解了搬迁的过程。我首先认为可执行文件是由链接器从头开始生成的,在我看到投票者的评论后,它就错了。假设您在代码中声明了一个全局变量int-arr[1000000]。若该信息不在对象文件
.bss
部分在对象文件中没有实际占用空间,我确实在objdump
信息中找到了一个大小为0的.bss
条目。所以问题是,在一个对象文件中存在这样一个空部分有什么必要
为什么不能将.bss
仅添加到可执行文件中,而不是同时添加到.o
和a.out
文件中,就像.rel
仅显示在对象文件中一样
更新:我想我误解了搬迁的过程。我首先认为可执行文件是由链接器从头开始生成的,在我看到投票者的评论后,它就错了。假设您在代码中声明了一个全局变量
int-arr[1000000]
。若该信息不在对象文件中,那个么它也不能进入可执行文件。而且,增加对象文件的大小来保存一个只不过是垃圾的信息是没有意义的。对可执行映像保持相同的状态。它将增加闪存的需求,并且没有任何用途。最好在RAM中加载映像时必须分配此区域。假设您在代码中声明了一个全局变量int arr[1000000]
。若该信息不在对象文件中,那个么它也不能进入可执行文件。而且,增加对象文件的大小来保存一个只不过是垃圾的信息是没有意义的。对可执行映像保持相同的状态。它将增加闪存的需求,并且没有任何用途。最好在RAM中加载图像时分配此区域。我不太理解您的问题。可执行文件中的节是由可执行文件组成的目标文件中的节,那么,如果不在目标文件中定义节,可执行文件还应该如何包含该节呢?我不太理解你的问题。可执行文件中的节是由可执行文件组成的对象文件中的节,因此,如果不在对象文件中定义节,可执行文件还应该如何包含该节?