【Linux】【内存】Linux内核内存分配
Linux内存管理几大分配方式
内存分配器 | 分配函数 | 使用场景 |
---|---|---|
引导内存分配器(Boot allocator) | bootmem | 内核启动时进行内存初始化 |
Buddy伙伴分配器(Buddy allocator) | alloc_pages | 以4K(一页)为分配单元进行内存分配 |
slab分配器(Slab allocator) | kmalloc | 高效分配小块内存的内存管理机制 (ps:还有slub slob) |
虚拟内存分配器 | vmalloc | 虚拟内存连续 物理内存不连续 分配的是虚拟内存 |
zsmalloc内存分配器(Zero-copy Smalloc) | zsmalloc | 内核内存压缩 减少内存碎片影响 |
特定DMA内存分配器 | dma_alloc_coherent | 专门用于分配用于 DMA(直接内存访问)的内存 |
SLAB:最早的版本。
SLUB:一种改进的版本,简化了实现并提高了性能。
SLOB:用于嵌入式系统,内存较为紧张的场景下使用。
后面会专门写一下Buddy伙伴分配器 因为这是Buddy内存分配主要针对以一页为分配单位