c-在linux中,除了伙伴分配器之外,还有其他内存分配路径吗



我正在了解Linux中的内存分配,并为我的实验对好友分配器(__alloc_pages_nodemask(进行了一些更改。我在struct page->flags中创建了一个新的标志(通过在page-flags.h中的enum pageflags中添加一个新标志。我在__alloc_pages_nodemask中永久设置了这个位(设置后不清除,并在所有进一步的分配和释放中都可以继续。我修改了PAGE_FLAGS_CHECK_AT_PREP以确保它(。但我看不到预期的行为。

我猜这是因为Linux也在使用一些不同的路径来分配内存(可能是在引导期间(。我的假设正确吗?

除了伙伴分配器之外,还有其他不同的内存分配路径吗?我在哪里能找到它?

我在内核邮件列表上问了这个问题。大卫/迪尔登布回答说,他的回答很有帮助。

memblock是启动期间的早期内存分配器,在伙伴之前正在启动并运行。范围分配器(例如alloc_tig_range(((是某种建立在好友之上的机制。另外allcoators(hugetlb、slab…(可能会缓存一些页面,但是有效地得到";物理存储器";通过memblock或好友。

CMA是另一个特殊用途的分配器,用于储备实物内存区域,然后使用范围分配器实际上在运行时在这些保留区域内分配内存。

可以在mm/memblock.c中找到完整的memblock文档和API。

相关内容

最新更新