我试过这个,但坚持下面的答案hello_world-1.c的问题
#include
执行的命令:
[kishore@localhost-localdomain ~]$gcc -Wall -Wextra -c hello_world-1.c[kishore@localhost-localdomain ~]$gcc -o hello_world-1 hello_world-1.o[kishore@localhost-localdomain ~]$size hello_world-1 hello_world-1.o text data bss dec hex filename 1222 280 4 1506 5e2 hello_world-1 139 0 0 139 8b hello_world-1.o[kishore@localhost-localdomain ~]$objdump -h hello_world-1.o hello_world-1.o: file format elf32-i386 Sections: IDx name Size VMA LMA file off Algn 0 .text 0000003b 00000000 00000000 00000034 2**0 CONTENTS,ALLOC,LOAD,RELOC,Readonly,CODE 1 .data 00000000 00000000 00000000 0000006f 2**0 CONTENTS,DATA 2 .bss 00000000 00000000 00000000 0000006f 2**0 ALLOC 3 .rodata 0000000c 00000000 00000000 0000006f 2**0 CONTENTS,DATA 4 .comment 0000002d 00000000 00000000 0000007b 2**0 CONTENTS,Readonly 5 .note.GNU-stack 00000000 00000000 00000000 000000a8 2**0 CONTENTS,Readonly 6 .eh_frame 00000044 00000000 00000000 000000a8 2**2 CONTENTS,DATA
谁能帮助我弄清楚下面问题可能是什么原因?
> size命令未列出hello_world或hello_world.o的堆栈或堆段.这背后可能是什么原因?
(对于上面的问题,答案是因为我没有调用任何函数,也没有使用任何堆段,这就是为什么它们没有出现在这里.我是否正确?)
> hello_world-1.c中没有全局变量.为什么size报告数据和bss段的目标文件长度为零,但可执行文件的长度为非零?
> size和objdump报告文本段的不同大小.你能否告知差异来自哪里?
我试过但未能就上述3个问题做出结论.感谢您对此的帮助.最佳答案1)堆栈和堆栈由OS在运行时创建;也就是说,在将可执行文件加载到虚拟内存之后.因此,它们不是可执行文件的一部分.
2)因为可执行文件还包含数据 – 而代码,请注意 – 来自链接器链接到目标文件的stdio库.
3)因为像这样调用的大小(没有任何参数)根据伯克利惯例显示大小.在此方案下,文本条目报告三个不同段的组合大小:
.文本
.RODATA
.eh_frame
另一方面,objdump仅报告.text的大小.如果根据SysV约定调用它,您可以单独查看.text,.rodata和.eh_frame的大小,如下所示:size -A hello_world-1.c.然后,您将看到与objdump完全相同的信息.
希望这可以帮助.
总结以上是内存溢出为你收集整理的c – size和objdump报告文本段的不同大小全部内容,希望文章能够帮你解决c – size和objdump报告文本段的不同大小所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)