posix_memalign函数主要用于申请内存时,做内存对齐使用,Windows下对应的函数为_aligned_malloc,但两者的参数有一定区别:
int posix_memalign(void **memptr, size_t alignment, size_t size); void * _aligned_malloc(size_t size, size_t alignment);
从stackoverflow上,找到了两种实现方式,对于第一种,我只能说,佩服佩服。
1、最简练的实现方式
#define posix_memalign(p, a, s) (((*(p)) = _aligned_malloc((s), (a))), *(p) ?0 :errno)
2、比较稳妥的实现方式
#ifdef _WIN32 static int check_align(size_t align) { for (size_t i = sizeof(void *); i != 0; i *= 2) if (align == i) return 0; return EINVAL; } int posix_memalign(void **ptr, size_t align, size_t size) { if (check_align(align)) return EINVAL; int saved_errno = errno; void *p = _aligned_malloc(size, align); if (p == NULL) { errno = saved_errno; return ENOMEM; } *ptr = p; return 0; } #endif