→ largesperm: 現在還是有一點很不解 為什麽幾乎每個壓縮解壓縮都是09/05 10:05
→ largesperm: 說可以解到 heap or mem 這樣我要怎麼存取解壓出來的09/05 10:05
→ largesperm: 檔案 可能我觀念還沒有很好 再研究看看09/05 10:05
解壓縮跟壓縮一定需要運算 運算就得用CPU
資料都是 硬碟 -> 記憶體 -> 快取 -> 暫存器
就算有個包裝好的API給你,內部的黑箱子也是這樣處理
高階語言你只要了解記憶體操作就好,至於要怎麼存取解壓縮的檔案,這會跟壓縮格式
有別。一般壓縮檔都會有類似索引的資訊,告訴你特定檔案的偏移量;至於能不能局部
解壓縮這要視演算法跟格式而定。
所以一般的流程是:
1. 取得壓縮檔案的資訊
2. 配置緩衝(Buffer)空間
3. 解壓縮直到目標檔案的區塊都解完
但老實講解壓縮/壓縮只是演算法,他的目標不一定是檔案,你要搞懂的是被壓
縮的資料是什麼/怎麼解讀。剩下的東西完全就是觀念問題:
例如你配置的是 4096 bytes 的Buffer,每次解壓縮 4096 到記憶體內後,就馬上用
file stream寫到硬碟檔案,整個流程完成後再讀回來,這是最簡單最陽春的做法。但
是如果你的目的,比方說只是要把目標資料顯示或再做處理,比方說raw image,直接在
記憶體作業就好,寫到硬碟只是浪費時空間而已。
→ largesperm: 就能用 但是 C++ 平台有很多種 所以大多都是看到09/05 10:30
→ largesperm: 直接給 .h.c.cpp 然後使用者再拿去自己的平台 compile09/05 10:31
→ largesperm: 不然的話 作者就得在每個平台 compile 出 lib09/05 10:31
→ largesperm: 這樣想不知道是不是正確的09/05 10:32
你問的問題,很多都在計算機概論裡面。
至於.lib要不要重新編譯,這種是實務問題,就算同樣在Windows平台內,只要你的tool-
chain不同,依賴的.lib就不同。舉例來說,光是Visual Studio自家就有差異了,所以這
個差異的要點平台反而是其次,重點是編譯器還有執行環境、參數。
C++的規格並沒有規範到編譯的產物,絕大多數的語言也都沒有,所以語言跟平台沒有絕
對的關聯,就跟Google曾經想推NaCl一樣,只要你有心、夠狂就好。