第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么第一次循環(huán)正常,到第二次的時候就出錯了?

為什么第一次循環(huán)正常,到第二次的時候就出錯了?

C++
長風(fēng)秋雁 2023-04-01 14:10:53
部分代碼:class ChunkInfo{public:char *buffer_address;//內(nèi)存塊的地址long realsize;//內(nèi)存塊的大小ChunkInfo(){}ChunkInfo(char *buffer,long size){this->realsize = size;this->buffer_address = buffer;}};list<ChunkInfo> CHUNK_INFO_LIST;ifstream in;in.open(inpath.c_str(),ios::in|ios::binary|ios::ate);ifstream::pos_type size = in.tellg();in.seekg(0,ios::beg);//指針回到頭部//如果文件大小大于1.5GB就分塊讀取,每塊設(shè)置大小1.5GB,并把信息構(gòu)造在ChunkInfo中,然后保存在list里。if(size>MAX_SIZE_BIT){cout<<"A"<<endl;while(in.good()){cout<<in.tellg()<<endl;//第一次循環(huán)正常,到第二次的時候就在這出錯了char *chunk_buffer = new char[CHUNK];in.read(chunk_buffer,CHUNK);long real_size = (long)in.gcount();ChunkInfo chunk(chunk_buffer,real_size);CHUNK_INFO_LIST.push_back(chunk);}in.close();}
查看完整描述

2 回答

?
Qyouu

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了

查看完整回答
反對 回復(fù) 2023-04-03
?
POPMUISE

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)然讀完一塊要釋放掉,不然最后還是不夠用,這樣就行了,你可以看書去了。

查看完整回答
反對 回復(fù) 2023-04-03
  • 2 回答
  • 0 關(guān)注
  • 235 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號