内存管理技术详解
1. 通用对象内存管理
对于不频繁的内存区域请求,会通过一组通用缓存来处理,这些缓存对象的大小呈几何分布,最小为 32 字节,最大为 131,072 字节。可以通过调用 kmalloc() 函数来获取这类对象,其代码如下:
void * kmalloc(size_t size, int flags)
{
struct cache_sizes *csizep = malloc_sizes;
kmem_cache_t * cachep;
for (; csizep->cs_size; csizep++) {
if (size > csizep->cs_size)
continue;
if (flags & __GFP_DMA)
cachep = csizep->cs_dmacachep;
else
cachep = csizep->cs_cachep;
return kmem_cache_alloc(cachep, flags);
}
return NULL;
}
该函数会使用 malloc_sizes 表来定位与请求大小最接近的 2 的幂次方大小,然后根据调用者是否指定 __GFP_DMA 标志,调用 kmem_cache_alloc() 函数分配对象。
超级会员免费看
订阅专栏 解锁全文
1602

被折叠的 条评论
为什么被折叠?



