如何从操作符new或mremap的malloc中获取页对齐内存

How to get page-aligned memory from operator new or malloc for mremap

本文关键字:malloc 获取 内存 对齐 mremap 操作符 new      更新时间:2023-10-16

是否有一种方法来分配内存块,使其起始地址与给定的页面大小对齐?注意,我不想在分配块之后计算对齐的地址。原因是在某些时候我必须在块上调用mremap(): mremap要求旧的地址参数与页面对齐。

mremap只能安全地使用在由mmap分配的内存区域上,这些区域本身就是对齐页面的。在其他任何地方使用它都是危险的(正式的,未定义的行为),并且可能看起来有效,但可能会以您无法立即看到的方式严重破坏事情。

您需要使用特定于系统的分配例程—这不是什么大问题,因为您还使用了依赖于系统的mremap函数。然而,你也需要小心你在内存中放置的东西(例如,使用放置new将不能很好地工作),因为mremap可能会在你改变内存的大小时改变内存的地址。

由于您很可能为此使用Linux,您考虑过匿名mmap区域吗?这将与malloc的行为相同,除了它会自动对齐页面。

一些malloc包提供此功能,但它不是标准化的。

posix版本