Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 什么';在对象文件中是否需要.bss节?_C_Compiler Construction_Linker_Abi - Fatal编程技术网

C 什么';在对象文件中是否需要.bss节?

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]。若该信息不在对象文件

Wikipedia提到,
.bss
部分在对象文件中没有实际占用空间,我确实在
objdump
信息中找到了一个大小为0的
.bss
条目。所以问题是,在一个对象文件中存在这样一个空部分有什么必要

为什么不能将
.bss
仅添加到可执行文件中,而不是同时添加到
.o
a.out
文件中,就像
.rel
仅显示在对象文件中一样


更新:我想我误解了搬迁的过程。我首先认为可执行文件是由链接器从头开始生成的,在我看到投票者的评论后,它就错了。

假设您在代码中声明了一个全局变量
int-arr[1000000]
。若该信息不在对象文件中,那个么它也不能进入可执行文件。而且,增加对象文件的大小来保存一个只不过是垃圾的信息是没有意义的。对可执行映像保持相同的状态。它将增加闪存的需求,并且没有任何用途。最好在RAM中加载映像时必须分配此区域。

假设您在代码中声明了一个全局变量
int arr[1000000]
。若该信息不在对象文件中,那个么它也不能进入可执行文件。而且,增加对象文件的大小来保存一个只不过是垃圾的信息是没有意义的。对可执行映像保持相同的状态。它将增加闪存的需求,并且没有任何用途。最好在RAM中加载图像时分配此区域。

我不太理解您的问题。可执行文件中的节是由可执行文件组成的目标文件中的节,那么,如果不在目标文件中定义节,可执行文件还应该如何包含该节呢?我不太理解你的问题。可执行文件中的节是由可执行文件组成的对象文件中的节,因此,如果不在对象文件中定义节,可执行文件还应该如何包含该节?