歡迎您光臨本站 註冊首頁

Linux內存分配方法

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

基於linux 驅動開發以及應用開發。 當想要分配內存的時候,要面對很多的內存分配函數: malloc kmalloc vmalloc alloc_page dma_alloc  …

簡單歸納如下:

malloc: 分配用戶空間內存 .不保證物理連續。linux中用戶空間和內核空間不能直接互相訪問內存,要通過copy_from_user copy_to_user 或者mmap影射。

kmalloc: 內核空間分小內存(小於128K,這個值可以修改),內物理上連續。 這個內存由於比較小,不是直接從buddy得到,而是由slab管理,slab會從buddy中get_free_page等方法得到空閑page,然後將小內存,通過kmem_cache_alloc等(kmalloc會調用kmem_cache_alloc)返回給申請內存的地方。

vmalloc: 內核空間分配內存,這個內存不保證物理上連續,而且內存可以比較大,大小好像沒有特別的限定。

alloc_page/dma_alloc…: 是從buddy 分配, 這個大小最大一般為4M或者8M, 由MAX_ORDER限制。 物理上連續的。



[火星人 ] Linux內存分配方法已經有417次圍觀

http://coctec.com/docs/program/show-post-71289.html