Tommy 碎碎念

Tommy Wu's blog

bsdiff 處理某些大檔案無法產生檔案的問題
post by tommy @ 02 十二月, 2010 10:05

前一陣子在製作 i8000 的 rom 時, 有利用 bsdiff 來產生比較小的 patch 檔案, 這樣子有些小差異的大檔案, 就可以用一個大檔案加上一些小小的 patch 檔案來取代. 可以節省不少空間.

不過後來幾次, 在 Windows 下執行 bsdiff 指令時, 常常跑一陣子後, 程式就結束, 並沒有產生任何 patch 的檔案, 也沒有任何的錯誤訊息. 在找不出原因時, 就試著把相關檔案丟到 linux 上去處理, 結果.... 試了好幾台機器, 都是一樣的結果. 後來終於在某一台主機上頭, 可以正常處理 (不過.... 似乎也看不出為什麼就這台可以, 其他的不行).

最近比較空閒, 就試著在 VC 裡頭用 debug mode 來跑, 最後好像有出現 stack overflow 的訊息. 看了一下 source code, 這程式是利用遞迴的方式來處理, 所以, 當檔案比較大的時候, 在某些情形下, 可以會造成遞迴次數過多, 而每次函數在呼叫時, 內部的變數是用 stack 來處理, 所以, 次數過多的確可能會造成 stack overflow.

VC 預設的 stack 大小為 1MB, 我們可以利用 /STACK 來指定所要的大小, 在這個程式上, 我設成 /STACK:1000000000 就可以處理我目前所有的檔案 (多數在 100-200MB).

Del.icio.us Furl HEMiDEMi Technorati MyShare
Bad Behavior 已經阻擋了 136 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS