38、Linux内核内存分配:深入探究与实践

Linux内核内存分配:深入探究与实践

1. 内存分配的实际情况

在x86_64的Ubuntu系统中,使用 kzalloc() 尝试分配20字节的内存,实际却获得了32字节,造成了12字节(60%)的浪费。这是因为在x86系统中, kmalloc 的slab缓存有16字节和32字节等不同规格,当请求的内存大小介于两者之间时,会分配较大规格的内存。在ARM架构的树莓派系统中, kmalloc 最小的slab缓存是64字节,所以请求20字节时会得到64字节。

需要注意的是, ksize() API仅适用于已分配的slab内存,不能用于页分配器API的返回值。

2. 使用 ksize() 测试slab分配

我们将之前的内核模块 ch8/slab3_maxsize 扩展为 ch8/slab4_actualsize 。在这个新模块中,我们使用 kmalloc() 进行内存分配和释放的循环操作,同时通过调用 ksize() API记录每次循环中slab层实际分配的内存量。

以下是相关代码:

// ch8/slab4_actualsize/slab4_actualsize.c
static int test_maxallocsz(void)
{
    size_t size2alloc = 100, actual
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值