2017-01-30 43 views
0

我所問的問題非常簡單。讓我們只是說,我想讀一個大文件(6GB),而沒有堆內存不足。我將如何做到這一點。 (我主要問的是,如果有一種方法來讀取部分文件清除緩衝區並讀取文件的下一部分)如何閱讀堆中大文件的內容而不存在內存錯誤

+1

哪種語言,C或C++?可能有區別。 C++語言有'operator new'和'placement new',它們不在C語言中。 –

+0

我主要要求c –

+1

你想在內存中分配一個文件嗎?但是沒有理由將整個文件保存在內存中。您必須讀取數據並將其放入緩衝區。然後,你必須對它做些什麼,然後 - 免費的緩衝區。或者你想要複製文件的一部分? – krlc

回答

1

內存容量和可用性與平臺和操作系統相關。

某些操作系統允許內存映射一個文件,其中操作系統管理爲您讀取數據到內存中。

無溢出讀取是通過使用讀取(在C又名freadistream::read在C++)來實現的。您告訴輸入函數需要在塊中讀取多少,函數返回實際讀取的數量。塊大小應該小於或等於爲數據分配的內存。下一次讀取將啓動文件中的下一個位置。在循環中執行以讀入所有數據。

此外,請驗證是否有理由同時將所有數據保存在內存中。大多數程序僅在有限的時間內保存一小部分數據。