唐伯虎 发表于 2021-7-27 11:43:52

文件空间变大的一个特例

文件空间变大的一个特例
 
转载时请注明出处
 
最近写一个通过汉字得到拼音的函数库,发现编译成静态库(.a)文件大小为300多K,编译成共享库文件陡增到500多K。这让我莫名其妙,开始以为是调试信息引起的,但strip之后没有多大变化。
 
用objdump看了一下:
# objdump -h libpinyin.so
5 .rel.dyn      00036840  000003cc  000003cc  000003cc  2**2
11 .rodata       000527b3  00036e00  00036e00  00036e00  2**5
 
重定位符号竟占了223296(0x00036840)字节,再查看定位符号:
# objdump -R libpinyin.so
 
libpinyin.so:     file format elf32-i386
 
DYNAMIC RELOCATION RECORDS
OFFSET   TYPE              VALUE
00036d30 R_386_RELATIVE    *ABS*
00036d37 R_386_RELATIVE    *ABS*
00036d3c R_386_RELATIVE    *ABS*
00036d6a R_386_RELATIVE    *ABS*
0006e1a0 R_386_RELATIVE    *ABS*
0006e1a4 R_386_RELATIVE    *ABS*
0006e1a8 R_386_RELATIVE    *ABS*
0006e1ac R_386_RELATIVE    *ABS*
0006e1b0 R_386_RELATIVE    *ABS*
0006e1b4 R_386_RELATIVE    *ABS*
0006e1b8 R_386_RELATIVE    *ABS*

这下我明白了:数据里使用了很多小字符串,每个字符串都有一个定重位符号,累积起来的就大了。要减小空间占用量,有两个方法,编译成静态库,或者把小字符串合并起来,通过偏移量访问。
 
 
 
 

文档来源:51CTO技术博客https://blog.51cto.com/u_15314083/3192656
页: [1]
查看完整版本: 文件空间变大的一个特例