alignmentmalloc()在海湾合作委员会?

在GCC或glibc中是否有任何标准化函数在alignment的指针处分配内存块? 像MSVC中的_align_malloc ()?

看到memalignfunction家庭。

自问题提出以来,C11标准化了一项新function:

void *aligned_alloc(size_t alignment, size_t size); 

它可以在glibc中使用(据我所知,不在窗口中)。 它的参数与memalign顺序相同,与微软的_aligned_malloc ,并且使用与通常一样的free函数来取消分配。

posix_memalign()函数提供了alignment的内存分配,自glibc 2.1.91开始可用。

从IEEE Std 1003.1-2004的posix_memalign()函数文档 :

posix_memalign()函数应该分配在由alignment指定的边界上alignment的大小字节,并且应该返回一个指向memptr中分配的内存的指针alignment的值应是sizeof( void *)的倍数,也是2的幂。 成功完成后, memptr指向的值应该是一致的倍数。

有大多数x86 / x64世界的编译器支持_mm_malloc_mm_free ,至less有:

  • GCC
  • MinGW(gcc win32 / win64)
  • MSVC
  • ICC

AFAIK,这些function根本不是一个标准。 但据我所知,这是最受支持的。 其他函数更多的编译器特定:

  • _aligned_malloc只是MSVC和MinGW
  • POSIX memalign函数至less不支持MSVC

也有C11的标准function,但不幸的是,他们不是在C + + 11,包括他们在C ++要求非标准的预处理器定义…

这取决于你期望的alignment方式。 你想要更严格的路线,还是更轻松的路线?

malloc根据定义保证返回一个正确alignment的指针,用于存储C程序中的任何标准types(以及因此,从标准types构build的任何types)。 这是你在找什么? 或者你需要不同的东西?