0
我所問的問題非常簡單。讓我們只是說,我想讀一個大文件(6GB),而沒有堆內存不足。我將如何做到這一點。 (我主要問的是,如果有一種方法來讀取部分文件清除緩衝區並讀取文件的下一部分)如何閱讀堆中大文件的內容而不存在內存錯誤
我所問的問題非常簡單。讓我們只是說,我想讀一個大文件(6GB),而沒有堆內存不足。我將如何做到這一點。 (我主要問的是,如果有一種方法來讀取部分文件清除緩衝區並讀取文件的下一部分)如何閱讀堆中大文件的內容而不存在內存錯誤
內存容量和可用性與平臺和操作系統相關。
某些操作系統允許內存映射一個文件,其中操作系統管理爲您讀取數據到內存中。
無溢出讀取是通過使用塊讀取(在C又名fread
和istream::read
在C++)來實現的。您告訴輸入函數需要在塊中讀取多少,函數返回實際讀取的數量。塊大小應該小於或等於爲數據分配的內存。下一次讀取將啓動文件中的下一個位置。在循環中執行以讀入所有數據。
此外,請驗證是否有理由同時將所有數據保存在內存中。大多數程序僅在有限的時間內保存一小部分數據。
哪種語言,C或C++?可能有區別。 C++語言有'operator new'和'placement new',它們不在C語言中。 –
我主要要求c –
你想在內存中分配一個文件嗎?但是沒有理由將整個文件保存在內存中。您必須讀取數據並將其放入緩衝區。然後,你必須對它做些什麼,然後 - 免費的緩衝區。或者你想要複製文件的一部分? – krlc