我对Linux内核中的伙伴系统分配器有疑问。
考虑这个例子:
假设伙伴系统正在分配128KB RAM。 如果我使用kmalloc分配32KB,我的理解是,
在步骤1中将128KB分成两个64KB,将第一个64KB分成两个32KB。 然后将第一个32KB分配给我。
显然仍有96KB的连续内存可供使用。
现在如果我在这个阶段分配90KB,会发生什么? 将kmalloc失败或伙伴(甚至slab)分配器处理这个并成功分配请求的内存?
答案 0 :(得分:0)
在第一次32KB之后,您无法分配大于64KB的任何内容。在这种情况下,kmalloc()
会返回nullptr
。
伙伴分配器也是如此。 Slab分配器的工作方式不同,但有一些主题。