linux內存分配方法

linux內存分配方法
 
基於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限制. 物理上連續的.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章