源码基于:Linux 5.4
约定:
- 芯片架构:ARM64
- 内存架构:UMA
- CONFIG_ARM64_VA_BITS:39
- CONFIG_ARM64_PAGE_SHIFT:12
- CONFIG_PGTABLE_LEVELS :3
0. 前言
kmalloc()、vmalloc()、malloc() 这三个函数是常用的内存分配函数,但有着本质的区别。
kmalloc() 基于slab 分配器,是建立在一个物理地址连续的大内存块上,所以 kmalloc() 分配的内存物理是上连续的,而且 kmalloc() 映射的虚拟内存在线性区域,也是连续的。详细可以查看《slub 分配器之kmem_cache_alloc》一文第 5.1.2 节。
相比于 kmalloc(),vmalloc() 实现是为了虚拟内存连续,而物理内存可以不用连续。正是因为物理内存不连续,而虚拟内存需要连续,所以,需