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)。 这是你在找什么? 或者你需要不同的东西?