天天看點

檔案空間變大的一個特例

檔案空間變大的一個特例

轉載時請注明出處

最近寫一個通過漢字得到拼音的函數庫,發現編譯成靜态庫(.a)檔案大小為300多K,編譯成共享庫檔案陡增到500多K。這讓我莫名其妙,開始以為是調試資訊引起的,但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*

這下我明白了:資料裡使用了很多小字元串,每個字元串都有一個定重位符号,累積起來的就大了。要減小空間占用量,有兩個方法,編譯成靜态庫,或者把小字元串合并起來,通過偏移量通路。