kmem_cache_* 创建连续内存?
kmem_cache_* creates contiguous memory?
我假设使用 kmem_cache_create
和 kmem_cache_alloc
创建和分配的内存块是连续的吗?
AFAIK、kmalloc() 和 kmem_cache_*() API 是 returning 连续内存 - 由 slab 分配器处理....
vmalloc() 可用于请求大块内存,它将 return "virtually contiguous" 内存(表示连续的虚拟地址区域)。
- 一个kmem_cache由1个或多个slab组成。
- 一个 slab 由 1 个或多个连续的页面组成。
因此,当您调用 kmem_cache_alloc
时,它 returns 您是 slab 中的一块内存,它由 1 个或多个连续的页面组成。
但是如果你调用kmem_cache_alloc
两次,你得到的2块内存可能不连续。
而kmem_cache_create
只创建和初始化一个kmem_cache的数据结构,不分配内存。
我假设使用 kmem_cache_create
和 kmem_cache_alloc
创建和分配的内存块是连续的吗?
AFAIK、kmalloc() 和 kmem_cache_*() API 是 returning 连续内存 - 由 slab 分配器处理....
vmalloc() 可用于请求大块内存,它将 return "virtually contiguous" 内存(表示连续的虚拟地址区域)。
- 一个kmem_cache由1个或多个slab组成。
- 一个 slab 由 1 个或多个连续的页面组成。
因此,当您调用 kmem_cache_alloc
时,它 returns 您是 slab 中的一块内存,它由 1 个或多个连续的页面组成。
但是如果你调用kmem_cache_alloc
两次,你得到的2块内存可能不连续。
而kmem_cache_create
只创建和初始化一个kmem_cache的数据结构,不分配内存。