2015-10-05 86 views
1

我正在研究一個程序,它需要一次將多達幾百張圖像加載到內存中。每個文件佔用100MB,所以我不想將它們全部存儲在內存中。我想要內存映射這些文件,以便操作系統在必要時將它們交換出來以節省物理內存。這是我想知道的。如果我已經在malloced內存中擁有了我想要的數據,那麼我應該打開文件描述符,使用write()將數據寫入文件,然後映射文件。或者我可以用內存映射一個新文件,然後使用memcpy複製數據。如果我要創建一個新文件,並且當我調用mmap時給它一個比文件大小更大的長度,它只會增加磁盤上文件的大小?如何將已經在內存中的地圖數據存儲到文件中

回答

0

根據POSIX標準:「mmap()函數可用於映射大於對象當前大小的內存區域。映射內但超出底層對象的當前端存儲的訪問可能會導致SIGBUS信號發送到進程。」(http://pubs.opengroup.org/onlinepubs/9699919799/

這就是說,你可以在你剛剛編寫的同一存儲區域嘗試mmap()MAP_FIXED從,如果你從頁面對齊aligned_alloc()而不是malloc(),或免費,然後mmap()。但請注意,操作系統將頁面內存,你有一段時間沒有使用交換,你可以用posix_madvise()幫助它。

+0

我知道掉期。但是說我在一個只有2GB內存和另一個2GB交換的系統上,我需要處理30GB的圖像。這就是爲什麼我要mmap文件。 – chasep255

相關問題