2 回答

TA貢獻1786條經(jīng)驗 獲得超11個贊
C++自己的流API似乎不支持,必須使用操作系統(tǒng)提供的api
如果是windows,應(yīng)該使用file mapping相關(guān)的api,看CreateFileMapping之類函數(shù)的MSDN說明吧
即使不大于2G在絕大部分情況下,大于1.5G放內(nèi)存都是不可能的。缺省C++api使用的是堆,而堆的內(nèi)存塊是很小的。分配給用戶端的內(nèi)存總共才2G,其中很多還要分配給系統(tǒng)和代碼。如果逆要使用超過幾百M的內(nèi)存,就需要好好研究虛擬內(nèi)存系統(tǒng),不能直接指望C++API了

TA貢獻1765條經(jīng)驗 獲得超5個贊
大文件可以被一部分一部分地讀,這在windows里被以虛擬內(nèi)存映射文件的方式實現(xiàn)。而不能用其本身的文件流,因為它自己是調(diào)用系統(tǒng)API實現(xiàn)的,而又缺少參數(shù),便保險地映射全部文件到內(nèi)存,而一般系統(tǒng)的虛擬地址空間為用戶2G,服務(wù)器上才3G。而2G里顯然要包括程序文件本身與環(huán)境子系統(tǒng)DLL們。所以剩下不足2G了,這下就不夠用了,所以不能用C++里的文件流。用windows系統(tǒng)自帶的API函數(shù)可以實現(xiàn)分塊映射讀取,當(dāng)然讀完一塊要釋放掉,不然最后還是不夠用,這樣就行了,你可以看書去了。
- 2 回答
- 0 關(guān)注
- 235 瀏覽
添加回答
舉報