在看《windows核心程式設計》時,看到記憶體對映檔案一章節,書中提到錄音檔案動態增長,作者也留下了連線關於他實現的「可增長的記憶體對映檔案」的方法,我沒找到,於是自己就試著寫了乙個,源**貼出來,以供日後參考
voidincreasefile()
unsigned
int tincreasesize = 0
; dword tfilesize = 0
;
const
char* const pstr = "
abcdefghijklmnopqrstuvwxyz";
while (true
)
tfilesize =getfilesize(hfile, null);
hfile, null, page_readwrite,
0, tfilesize + tincreasesize, l""
);
//將檔案對映到記憶體的位址空間,就可以操作這個記憶體對映檔案了
//比如錄音檔案
//建立1k大小的檔案,寫記憶體對映檔案,滿了,用此檔案再重建記憶體對映檔案,將大小擴大1k,將指標移動至原檔案的大小處,寫新申請1k空間
//這樣就可以實現不斷的增長的記憶體對映檔案
lpvoid pviewfile =mapviewoffile(
0,0,0
);
if (null ==pviewfile)
//寫資料
strcpy((char*)pviewfile +tfilesize, pstr);
unmapviewoffile(pviewfile);
}closehandle(hfile);
}
陣列空間的動態增長
寫 的時候常常會遇到陣列空間不確定的情況,如果預先用陣列定義,那麼需要分配足夠大的空間以防不夠用,這樣就很可能造成空間的浪費。因此利用vector存放陣列,分兩種情況 1.陣列個數採用輸入的形式 include using namespace std intmain for int i 0 i n ...
日誌檔案不斷增長
原文 日誌檔案不斷增長 sqlserver定時執行 checkpoint 保證 髒頁 被寫入硬碟。沒做checkpoint的,可能是只在記憶體中修改,資料檔案還沒同步。sqlserver要在硬碟的日誌檔案中有記錄,一邊異常重啟後重新修改。所有日誌都有嚴格順序,不能有跳躍。如果恢復模式不是簡單模式,那...
日誌檔案不斷增長
sqlserver定時執行 checkpoint 保證 髒頁 被寫入硬碟。沒做checkpoint的,可能是只在記憶體中修改,資料檔案還沒同步。sqlserver要在硬碟的日誌檔案中有記錄,一邊異常重啟後重新修改。所有日誌都有嚴格順序,不能有跳躍。如果恢復模式不是簡單模式,那麼sqlserver會認...