2016-01-20 108 views
0

我有兩個不同版本的GCC編譯兩個目標文件:由gzip壓縮的小文件比大文件大?

文件名大小(字節)

a1.o 48194128

a2.o 41984052

A2的大小。 o比a1.o小。但被gzip壓縮後,a2.o.gz的大小大於a1.o.gz的大小。基礎的理論是什麼?提前致謝。

回答

2

文件大小和壓縮大小之間沒有直接關係。

I.e.樣品RLE壓縮(比GZIP差很多,但更容易顯示想法):

  • 文件1:{0,0,0,0}的4個字節壓縮到約2個字節{4,0}
  • 文件2:{1,2,3,4} 4個字節增長到約8個字節而不是壓縮{1,1,1,2,1,3,1,4}

通常,更多的隨機數據在文件中比可壓縮文件少。

對於編譯的二進制文件,不同的選項可能會觸發額外的表格(如源位置)或使用不同的(ASCII與UTF-16)字符串表示形式 - 所有這些都可能會改變文件中壓縮可以使用的重複量實際上壓縮二進制文件

+0

謝謝。有沒有更好的壓縮算法可以克服這個弱點? – yuwen

+1

你的任意期望沒有得到滿足並不是一個弱點。如果出於某種原因,您真的希望兩次壓縮的結果具有相同的壓縮比率,則將較大的壓縮比率文件填充到零,直到它們都相同。 –