簡體   English   中英

std :: ofstream :: open會將整個文件讀入內存嗎?

[英]std::ofstream::open will it read the entire file into memory?

我正在將內存中的內容寫入磁盤,以釋放內存。

我不知道每次調用open()並將新元素追加到文件末尾時,會否將整個文件讀入內存? 還是只是指向文件末尾的指針?

如果您使用ofstream::appios::appofstream::ateios::ate模式來打開文件,則fstream實現未完全指定會發生什么。

但是在任何合理的實現中,都不會將文件讀入內存,所有發生的事情是fstream實現將“當前位置”定位到文件末尾。

如果您的系統具有2GB的RAM,並且想要附加到大於2GB的文件,那么將整個文件讀入回憶將是非常糟糕的。

由於過於花哨,在向文本文件中寫入內容時,作為操作系統一部分的文件系統很可能會讀取文件的最后幾個(千字節)字節,因為大多數硬盤和類似的存儲都需要數據正在寫入固定大小(例如512字節或4千字節)的“塊”中。 因此,除非當前文件大小恰好位於該塊的邊界,否則文件系統必須讀取文件的最后一個塊,並將其與您要求寫入的其他數據一起寫回。

如果您擔心附加到非常大的日志文件中,不,這不是問題。 如果由於文件中有不想存儲的秘密數據而擔心內存安全,那么可能會出現問題,因為其中的一部分可能會加載到內存中,您無能為力那。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM