一尘不染

KMALLOC大小分配

linux

KMALLOC是仅在页面大小的内存中分配还是可以分配较少的内存?kmalloc可以分配多少大小?我在哪里可以找到它的描述,因为到处看都没有真正说出它分配了多少内存?我想知道KMALLOC分配的实际大小是多少。是否分配2的幂的大小?它只是从准备就绪的缓存中查找可用对象吗?


阅读 180

收藏
2020-06-07

共1个答案

一尘不染

我的理解如下:内核正在处理系统的物理内存,仅在页面大小的块中可用;因此,在调用时,您kmalloc()将仅获得某些预定义的固定大小的字节数组。

您获得的实际内存取决于系统的体系结构,但是kmalloc可以处理的最小分配量最大为32或64字节。您将kmalloc() 至少
从呼叫中返回所需的内存(通常更多)。通常,您获得的空间不会超过128 KB(再次取决于体系结构)

要获取系统的页面大小(以字节为单位),您可以执行以下命令:

getconf PAGESIZE

要么

getconf PAGE_SIZE

有关最大页面大小的信息位于/usr/src/linux/include/linux/slab.h中

是的,页面大小通常是2的乘方,但同样,您不会完全得到所需要的,而是更多。

您可以使用如下代码:

void * stuff;
stuff = kmalloc(1,GFP_KERNEL);
printk("I got: %zu bytes of memory\n", ksize(stuff));
kfree(stuff);

要显示分配的实际内存量:

[90144.702588] I got: 32 bytes of memory
2020-06-07