文件空间变大的一个特例

文件空间变大的一个特例

转载时请注明出处:http://blog.youkuaiyun.com/absurd

最近写一个通过汉字得到拼音的函数库,发现编译成静态库(.a)文件大小为300K,编译成共享库文件陡增到500K。这让我莫名其妙,开始以为是调试信息引起的,但strip之后没有多大变化。

objdump看了一下:

[root@localhost pinyin]# objdump -h libpinyin.so

5 .rel.dyn 00036840 000003cc 000003cc 000003cc 2**2

11 .rodata 000527b3 00036e00 00036e00 00036e00 2**5

重定位符号竟占了223296(0x00036840)字节,再查看定位符号:

[root@localhost pinyin]# 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*

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值