4

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

4

3 回答 3

2

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

于 2013-06-02T15:53:05.600 回答
1

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

正版

于 2013-06-02T15:18:22.987 回答
1

您需要使用系统特定的分配例程 - 这不是什么大问题,因为您还使用了系统相关的 mremap 函数。但是,您还需要注意您在内存中放置的内容(例如,使用放置new效果不佳),因为当您更改内存大小时,mremap 可能会更改内存的地址。

由于您很可能为此使用 Linux,您是否考虑过匿名mmap区域?这与 malloc 的行为相同,但无论如何它都会自动进行页面对齐。

于 2013-06-02T15:27:18.440 回答