代码之家  ›  专栏  ›  技术社区  ›  Eloff

posix:在64kb边界上分配64kb

  •  0
  • Eloff  · 技术社区  · 14 年前

    我真的很想只分配64kb的内存,而不是128kb,然后手动进行对齐——太浪费了。Windows上的virtuaalloc正好提供了这种行为。据推测,松鼠鱼中几乎每个平台都有这样做的代码,但我还没有找到它。在POSIX中,是否有一种在64KB边界上分配64KB的节省空间的方法?在Linux中失败了吗?

    3 回复  |  直到 14 年前
        1
  •  8
  •   Steven Schlansker    14 年前

    退房 posix_memalign(3)

    简介

     #include <stdlib.h>
    
     int
     posix_memalign(void **memptr, size_t alignment, size_t size);
    

    描述

     The posix_memalign() function allocates size bytes of memory such that
     the allocation's base address is an exact multiple of alignment, and
     returns the allocation in the value pointed to by memptr.
    

    查看手册页了解更多详细信息…

        2
  •  0
  •   srparish    14 年前

    可以将mmap()与map_private一起使用。现在有相当多的libc分配器在内部使用mmap()获取要分配的内存块。

        3
  •  0
  •   R.. GitHub STOP HELPING ICE    14 年前

    当然,posix-memalign是一个很好的解决方案,但是即使您分配了128K,任何未接触的页面都将保留为写零页的拷贝,并且使用最少的物理资源。你也可以使用mmap和map_private制作一张128K的地图,然后对其中任何未对齐的部分进行munmap。