You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCC在共享对象.init_array前留虚拟内存间隙的原因及相关疑问

关于共享对象(SO)的两个内存与尺寸疑问
  • 发现共享对象中.init_array段前始终存在虚拟内存间隙,不确定这只是行业惯例还是有明确规范要求,暂未找到相关参考资料。当主程序加载大量SO时,htop显示的虚拟内存占用会明显上升,虽推测该间隙仅为虚拟地址空间,不会被实际页入物理内存、无实质性能影响,但这种显示方式存在误导性。
  • 同时发现size命令输出的总尺寸数值与文件实际磁盘占用不匹配,推测原因是size未计算段/节之间的填充空间。

复现示例

使用gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609测试,其他系统结果一致:

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

ls -l libfoo.so输出:

-rwxr-xr-x 1 root root 28936 Apr 17 18:48 libfoo.so*

内容的提问来源于stack exchange,提问作者Zack Light

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 18:12:53