9.【linux驅動】一文看懂linux內存分配malloc、zalloc、kmalloc、kzalloc

內核空間

先上表格

分配函數 釋放函數 分配原理 大小限制/單位 物理地址連續 初始化爲0 適用場景
__get_free_pages __free_pages buddy 4MB/頁 適用於分配較大量的連續物理內存
alloc_pages __free_pages buddy 4MB/頁 適合需要頻繁申請釋放相同大小內存塊時使用
kmem_cache_alloc kmem_cache_free slab 128KB/字節 適合需要頻繁申請釋放相同大小內存塊時使用
kmalloc kfree kmem_cache_alloc 128kb/字節 最常見的分配方式,需要小於頁框大小的內存時可以使用
kzalloc/kcalloc kfree slab 128kb/字節 最常見的分配方式,需要小於頁框大小的內存時可以使用
vmalloc vfree slab 無限制/字節 可能睡眠,不能從中斷上下文中調用,或其他不允許阻塞情況下調用。VMALLOC區域vmalloc_start~vmalloc_end之間,vmalloc比kmalloc慢,適用於分配大內存。
dma_alloc_coherent dma_free_coherent __alloc_pages 4MB/字節 DMA操作
ioremap iounmap 物理地址到虛擬地址映射 字節 / 需要操作物理地址的時候
alloc_bootmem / 物理地址到虛擬地址映射 字節 / 在啓動kernel時,預留一段內存,內核看不見

用戶空間

分配函數 釋放函數 單位 物理地址連續 初始化爲0 適用場景
malloc free 堆申請/字節 適用於分配較大量的連續物理內存
calloc free 堆申請/字節 適用於分配較大量的連續物理內存
alloca 自動 棧申請/字節 適用於分配較大量的連續物理內存
mmap munmap 字節 / 吧文件映射到虛擬地址上
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章