我一直在尋求獲得malloc和mmap系統調用之間的區別。這兩者之間的確切區別是什麼?建議哪個?瞭解mmap
Q
瞭解mmap
1
A
回答
2
mmap()
實際上並未將文件加載到內存中(不使用任何內存,但它佔用地址空間),但malloc()
分配內存形式堆。
我的建議是使用malloc()
用於小物體,mmap()
用於大物體。
1
他們有很大的不同:
malloc()
從分配堆內存;mmap()
是一個用於memory-mapped files的API。
在大多數情況下,它們不是互相替代的,所以關於哪一個更好的問題並沒有真正的意義。
5
mmap()是映射磁盤上文件數據的系統級地址。使用mmap(),你可以引用磁盤上的任何文件,就好像它是一個簡單的byte []數組。它可以用於以下任何應用中。
無論何時從磁盤上的文件請求數據,它都會加載到RAM中。 如果您有兩個單獨的程序需要來自同一文件的數據,您可以使用mmap()直接從磁盤訪問該文件,從而減少了冗餘RAM使用量。
當你正在處理的數據如此之大,它不能在 主內存(RAM),你可能會使用mmap()中的數據文件的 其中的物理存儲上的訪問部分適合您磁盤,從而再次減少RAM使用量並有效處理大於RAM數據。
請注意,在64位系統中,mmap()可以處理磁盤上的任何位置,但不能處理32位系統中的任何位置!因爲在32位系統中,最大可尋址空間限制爲2^32 - 1(4GB),但在64位系統上可以尋址PB級的位置。
malloc()爲您提供了一個指針,指向堆(RAM)中的某個空間來存儲臨時對象。
mmap()和malloc()之間唯一的相似之處是它們都返回指針。但是mmap()指向磁盤上的內存,malloc()指向堆上的內存。
相關問題
- 1. 解決MMAP錯誤
- 2. 高效解析mmap文件
- 3. 解析mmap() - ed文件
- 4. mmap(2)vs mmap(3)
- 5. 當mmap()
- 6. mmap替代malloc
- 7. mmap()返回EINVAL
- 8. Python mmap/dev/port
- 9. 使用mmap
- 10. libc.so MMAP strace的
- 11. Mmap和結構
- 12. malloc vs mmap C
- 13. 一套C++ mmap
- 14. Python,ctypes和mmap
- 15. 爲什麼在32位armv7l上mmap 4GB文件成功了?
- 16. 的Perl腳本MMAP了錯誤,因爲 「無效參數」
- 17. 索引到mmap中?
- 18. Python mmap ctypes - 只讀
- 19. MMAP使用結構
- 20. Hook mmap/munmap without LD_PRELOAD
- 21. mmap on/proc/pid/mem
- 22. 試圖引起MMAP
- 23. CUDA的malloc,MMAP/mremap
- 24. 使用mmap和popen
- 25. 開銷使用mmap
- 26. Linux/perl mmap性能
- 27. 如何mmap()隊列?
- 28. 用`mmap`代替`sbrk`
- 29. mmap有多聰明?
- 30. pad配置由mmap
這個信息是不準確的。 mmap確實將文件加載到內存中 - 它將內核頁面映射到用戶空間。關於堆棧溢出的答案很多,詳細介紹了它的工作原理。或者閱讀Stevens的「高級Unix編程」。 – resigned 2013-11-01 00:09:06