簡體   English   中英

截斷內存映射文件

[英]Truncating a memory mapped file

我目前正在使用Boost.Iostreams內存映射多個文件,以寫出非常大的數據集。 要寫入的數據量會有所不同,並保證不會超出預定義的限制。 通常,使用映射文件的全部容量,但有時不使用,僅寫入很小的一部分。

我的問題是,我事先不知道要寫入的數據量,因此每個內存映射文件都是以相等的大小創建的。 結果,該程序效率較低,因為在關閉時尚未完全使用的文件將被零填充。

有沒有一種方法可以使用Boost.Iostreams或另一個跨平台庫(最好是boost)在關閉之前截斷文件?

我知道還有其他類似的問題,但我不認為它們提供了跨平台的解決方案。

您可以使用truncate(2)ftruncate(2)系統調用來截斷現有文件的大小。

請注意,該使用應在截斷之前先對文件進行munmap() 。如果查看mmap(2)手冊頁的內容,則該文件說明截斷mmap-ed文件是未定義的行為。

但是,在將文件截斷之前munmap()處理不應破壞任何規則。

暫無
暫無

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

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