我正在研究一個程序,它需要一次將多達幾百張圖像加載到內存中。每個文件佔用100MB,所以我不想將它們全部存儲在內存中。我想要內存映射這些文件,以便操作系統在必要時將它們交換出來以節省物理內存。這是我想知道的。如果我已經在malloced內存中擁有了我想要的數據,那麼我應該打開文件描述符,使用write()將數據寫入文件,然後映射文件。或者我可以用內存映射一個新文件,然後使用memcpy複製數據。如果我要創建一個新文件,並且當我調用mmap時給它一個比文件大小更大的長度,它只會增加磁盤上文件的大小?如何將已經在內存中的地圖數據存儲到文件中
1
A
回答
0
根據POSIX標準:「mmap()函數可用於映射大於對象當前大小的內存區域。映射內但超出底層對象的當前端存儲的訪問可能會導致SIGBUS信號發送到進程。」(http://pubs.opengroup.org/onlinepubs/9699919799/)
這就是說,你可以在你剛剛編寫的同一存儲區域嘗試mmap()
與MAP_FIXED
從,如果你從頁面對齊aligned_alloc()
而不是malloc()
,或免費,然後mmap()
。但請注意,操作系統將頁面內存,你有一段時間沒有使用交換,你可以用posix_madvise()
幫助它。
相關問題
- 1. 如何將本地數據存儲下載到csv文件中?
- 2. 如何將Python /文件數據存儲在內存中,直到寫入磁盤?
- 3. 如何將數據存儲爲本地存儲中的數組?
- 4. 將文件存儲在內存中
- 5. 如何在Ruby on Rails中將數據存儲在內存中
- 6. 將文件存儲在Pig中已經佔用的位置
- 7. 如何在GAE數據存儲中將base64圖像作爲文件存儲
- 8. 如何將數據存儲到Android中的平面文件中?
- 9. 如何將原始數據存儲在圖像文件中?
- 10. 將JSON文件中的數據存入本地存儲
- 11. 如何在本地內存中存儲動態數據:Android
- 12. 將文本文件中的值存儲到地圖中
- 13. 在內存中存儲大型地圖
- 14. 將數據存儲到地圖
- 15. 將數據存儲在文件中(C++)
- 16. 將數據存儲在HTML文件中
- 17. C#中的數據源內存和存儲到XML文件
- 18. 如何在Azure(.Net)中導入csv文件(已經上傳到blob存儲中)
- 19. 如何在內存中存儲大量的文本數據?
- 20. 如何將數據存儲在j2me中的文件中?
- 21. 如何在PHP中將圖像文件存儲到數據庫中?
- 22. 如何svn忽略已經添加到存儲庫的文件?
- 23. 如何在expressjs中將會話數據存儲在文件中?
- 24. 如何迭代xml文件並將其存儲在地圖中
- 25. 如何將數據存儲到NSMutableString中?
- 26. 將數據保存到本地存儲
- 27. 將數據保存到本地存儲
- 28. 如何刪除存儲在本地存儲中的數據?
- 29. 如何將數據存儲在臨時內存中
- 30. mov eax如何將數據存儲在內存中?
我知道掉期。但是說我在一個只有2GB內存和另一個2GB交換的系統上,我需要處理30GB的圖像。這就是爲什麼我要mmap文件。 – chasep255