2015-11-04 76 views
0

我使用boost::iostreams::mapped_file_source創建一個內存映射文件。超過1024.當我創建大約1024個內存映射文件時,我驚訝地發現我的程序會拋出一個異常,指出打開的文件過多。經過一番研究後,我發現Ubuntu使用每個進程1024的最大文件大小(從ulimit -n找到)。不幸的是,我需要同時打開所有文件。有沒有人知道解決這個問題的方法?有沒有可能使文件不能達到極限?我正在考慮將它們合併成一個文件;不過,如果可能的話,我想避免這種表現。我也不想通過改變這個值來修改操作系統。任何正確的方向點非常感謝!內存映射文件和最大文件大小

+1

您可能想檢查此問題http://unix.stackexchange.com/questions/75996/modify-ulimit-open-files-of-a-specific-process – Oleg

回答

3

爲什麼你需要許多映射文件打開?這似乎非常低效。也許你可以映射(區域)一個大文件?

問:我想把它們合併成一個文件;然而,我想避免,如果可能由於性能

這是......廢話。表現可能基本上只會增加。要牢記

一個特別的事情是你的「大映射文件」內的不同區域對準你的內存頁/磁盤塊大小的倍數。 4k應該是這個粗略對齊的好起點。

+0

您認爲這會提高性能的原因是什麼? – joshu

+1

一件事,你會減少開銷上(很明顯,因爲你已經跑出特定資源的你的配置下......)。另一方面,您顯然不需要隨時打開/重新打開映射(您可以保持打開狀態)。常見的誤解是「這會佔用太多內存」,但虛擬內存根本就不能這樣工作。 – sehe

+1

(在那最後一個話題:http://stackoverflow.com/questions/24249763/release-memory-mapped-memory/24253385,也可能是有趣的:http://stackoverflow.com/questions/24352943/write-only-memory -mapping式升壓/ 24354199 S = 55 |?0.0000#24354199) – sehe