posix_memalign 应该因尺寸错误而失败吗?

should posix_memalign fail on wrong size?

我正在使用 posix_memalign 来获取一些内存对齐内存。 man pages 表示

  1. 大小必须是 2 的幂
  2. 和 sizeof(void*)
  3. 的倍数

我试过这个电话看看会发生什么

 void* ptrs;
 int ret = posix_memalign(&ptrs, getpagesize(), 13);

看到 return 的值为 0,我感到很惊讶。 我通常这样称呼它作为例子

 void* ptrs;
 int ret = posix_memalign(&ptrs, getpagesize(), 32 * sizeof(void*));

你知道为什么会这样吗?

我在 LUbuntu 下使用 g++4.9。

manual

The value of alignment shall be a multiple of sizeof( void *), that is also a power of two

为了清楚起见,这里是posix_memalign

的声明
int posix_memalign(void **memptr, size_t alignment, size_t size);

您传递的 size 不是指针大小的两倍的幂。但这没关系,因为您用作 alignmentgetpagesize() 返回的值可能是。

我没有看到 size 的任何要求,但它可能不能为负数。