KMALLOC是仅在页面大小的内存中分配还是可以分配较少的内存?kmalloc可以分配多少大小?我在哪里可以找到它的描述,因为到处看都没有真正说出它分配了多少内存?我想知道KMALLOC分配的实际大小是多少。是否分配2的幂的大小?它只是从准备就绪的缓存中查找可用对象吗?
我的理解如下:内核正在处理系统的物理内存,仅在页面大小的块中可用;因此,在调用时,您kmalloc()将仅获得某些预定义的固定大小的字节数组。
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