欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
編譯器從業(yè)者 (Beta): 使用zlib庫壓縮數據

不靠譜的世界里 | http://compiler.yingbo.com

星期三, 十一月 29, 2006

使用zlib庫壓縮數據

在分析程序性能的時(shí)候,經(jīng)常需要獲得程序的運行蹤跡,比如程序的訪(fǎng)存蹤跡,跳轉指令蹤跡等。如果評測程序的動(dòng)態(tài)指令數很多,則生成的蹤跡數據也會(huì )很大。以SPEC2000整點(diǎn)程序(使用train輸入)為例,動(dòng)態(tài)指令數通常在幾十到幾百億條左右,以4 bytes來(lái)描述一條指令的話(huà),生成的蹤跡大小為十G級別,那么這套測試集的蹤跡需要百G的磁盤(pán)空間。

為了控制蹤跡數據的大小,可以使用zlib庫來(lái)壓縮蹤跡數據。zlib提供了一批函數來(lái)壓縮數據。有多種方案可以選擇。

  1. 使用gzwrite(gzFile file, const voidp buf, unsigned len)函數
    設置一個(gè)buf來(lái)存放蹤跡,比如64M大?。ㄖ饕菫榱藴p少壓縮函數的調用次數),當buf滿(mǎn)的時(shí)候,調用gzwrite壓縮該buf并寫(xiě)到蹤跡文件中。注意該函數的每次調用都會(huì )對整個(gè)文件進(jìn)行一次整體處理,因此最終生成的壓縮文件可以用gzip解壓。
    對蹤跡數據進(jìn)行分析的時(shí)候,可以調用gzread()函數讀取。
  2. 使用compress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)和fwrite()
    之所以提出這種方法,主要是第一種方法在32位機器上無(wú)法處理超過(guò)2G的大文件,會(huì )報file limit exceeds錯誤,這可能是因為gzwrite沒(méi)考慮大文件的處理(發(fā)信問(wèn)zlib作者,還沒(méi)回我)。因此就輾轉使用fwrite來(lái)解決大文件處理問(wèn)題。因為通過(guò)-D_FILE_OFFSET_BITS=64參數可以使得fwrite和fread處理超過(guò)2G的大文件。
    具體的使用還是設置一個(gè)buf,通過(guò)compress壓縮后,調用fwrite寫(xiě)到蹤跡文件中??紤]到將來(lái)要讀取,因此也要把壓縮前后數據的大小也寫(xiě)到文件中。讀取的時(shí)候,先f(wàn)read讀出每個(gè)壓縮塊數據的大小,再讀取相應大小的壓縮數據,使用uncompress()解壓。
目前的評測發(fā)現對指令蹤跡的壓縮率通常大于10,有些情況下達到40;對評測時(shí)間的影響可以接受,時(shí)間為原來(lái)的1.5-2倍。

 

 
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
漫談linux文件IO
zlib的uncompress函數出現Z_BUF_ERROR的原因
轉載:MFC文件操作,很全面
文件操作
什么是文件系統?
C/C++文件的操作(fread() fwrite())
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久