- 显然,共享对象总是在
.init_array
之前存在差距.这只是一个大会吗?我找不到任何参考资料.
如果我的主程序加载太多SO,htop会显示虚拟内存空间使用率显着增加.这似乎很具有误导性,尽管我认为它对现实世界的影响为零,因为差距只是虚拟的,不会被引用并因此被翻页到物理内存中?
- 此外,大小列与实际磁盘空间不匹配.我的猜测是大小列中的总大小不考虑段/部分之间的填充.
gcc(Ubuntu 5.4.0- 6 ubuntu 1 ~16.04.12)5.4.0 20160609的最小示例,用于以下命令.在我try 过的其他系统中也是如此.
foo.c 中的内容
#include <stdio.h>
void foo(void)
{
puts("Hello, I am a shared library");
}
gcc -c -Wall -Werror -fpic -g3 foo.c
gcc -shared -o libfoo.so foo.o
当判断SO文件时,我得到以下输出.
❯ size -A -d libfoo.so
libfoo.so :
section size addr
.note.gnu.build-id 36 456
.gnu.hash 60 496
.dynsym 336 560
.dynstr 172 896
.gnu.version 28 1068
.gnu.version_r 32 1096
.rela.dyn 192 1128
.rela.plt 24 1320
.init 26 1344
.plt 32 1376
.plt.got 16 1408
.text 275 1424
.fini 9 1700
.rodata 29 1709
.eh_frame_hdr 28 1740
.eh_frame 100 1768
.init_array 8 2100736
.fini_array 8 2100744
.jcr 8 2100752
.dynamic 448 2100760
.got 40 2101208
.got.plt 32 2101248
.data 8 2101280
.bss 8 2101288
.comment 53 0
.debug_aranges 48 0
.debug_info 145 0
.debug_abbrev 69 0
.debug_line 424 0
.debug_str 15511 0
.debug_macro 4020 0
Total 22225
❯ l -l libfoo.so
-rwxr-xr-x 1 root root 28936 Apr 17 18:48 libfoo.so*