int posix_memalign(void** memptr, size_t alignment, size_t size);
void* _aligned_malloc(size_t size, size_t alignment);
1、
template <typename T>
inline T Align(const T Ptr, int Alignment)
{
return (T)(((uint64_t)Ptr + Alignment - 1) & ~(Alignment - 1));
}
2、
#define posix_memalign(p, a, s) (((*(p)) = _aligned_malloc((s), (a))), *(p) ?0 :errno)
3、
#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