如何分配类似VirtualAlloc的记忆区域?

时间:2011-05-22 03:37:05

标签: linux virtualalloc

我一直在寻找一种在Linux上分配内存的方法,类似于Windows上的VirtualAlloc。要求是:

  1. 要分配的内存块大小为2 ^ 16。
  2. 存储器块的地址大于0x0000ffff
  3. 存储器块的地址必须最后16位为零。
  4. 在Windows上,因为应用程序地址的下限(lpMinimumApplicationAddress)我们有(2)明显的权利。从(1),(2)和系统规则我们也实现了(3)。

    感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

尝试mmap(..., MAP_ANONYMOUS, ...)

您将获得与页面边界对齐的地址。对于比这更严格的对齐,您可能需要分配额外的并在较大的块内选择一个地址而不是正确对齐。

答案 1 :(得分:0)

你可以向mmap询问一个特定的地址,它可能会因某些特定的地址而失败,但通常会起作用

答案 2 :(得分:0)

您想要posix_memalign()

void *ptr;
int memalign_err = posix_memalign(&ptr, 1UL << 16, 1UL << 16);

if (memalign_err) {
    fprintf(stderr, "posix_memalign: %s\n", strerror(memalign_err));
} else {
    /* ptr is valid */
}

第一个1UL << 16是对齐,第二个是大小。

完成阻止后,您将其传递给free()