使用MapViewOfFile映射檔案時,檔案大小為1g左右,vc下可以直接映射成功,bc下GetLastError錯誤8。使用VirtualQuery查詢當前可用虛擬記憶體的最大連續空間,vc下1.7g,bc下700m左右,所以不能映射。32位系統的行程用戶地址空間不都是2g嗎?為什么bc不行?
另外,使用較小的塊來回圈映射資料時,例如視頻資料,兩個塊之間的資料怎么處理?視頻資料每一幀大小不固定,但記憶體映射都是64k的整數倍。
uj5u.com熱心網友回復:
在兩個塊的前面或后面放一個塊用來復制被截斷的視頻幀資料,保證后續的處理都能得到完整的視頻幀uj5u.com熱心網友回復:
在每塊虛擬記憶體首段內容中增加一段資料結構,用于存盤當前虛擬記憶體中有效資料的大小回圈讀取時先讀取首段資料結構內的資料,緊接著將后續資料使用memcpy函式將不同塊間的資料連接起來
下面是我的思路:
int ii=0,nBlockSize=5,nVirtalLen=0,nBuffLen=0;
void *pVirtalPtr=NULL;
void *pBuff1G=malloc(1024*1024*1024);
for(ii=0;ii<nBlockSize;ii++)
{
pVirtalPtr=MapViewOfFile......;
nVirtalLen=*((int *)pVirtalPtr);
memcpy((char *)pBuff1G+nBuffLen,(int *)pVirtalPtr+1,nVirtalLen);
nBuffLen+=nVirtalLen;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/137516.html
上一篇:判斷本地磁盤和移動硬碟
