应该posix_memalign错误的大小?

时间:2015-03-20 14:39:01

标签: c++ linux posix memory-alignment

我使用posix_memalign来获取内存对齐的内存。 man pages表示

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

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

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

    我很惊讶地看到返回值为0。 我通常以这种方式称之为

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

    你知道为什么会这样吗?

    我在LUbuntu下使用g ++ 4.9。

1 个答案:

答案 0 :(得分:1)

manual

  

对齐的值应为sizeof(void *)的倍数,也是2的幂

要清楚,这是posix_memalign的声明

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

您已经传递了size,它不是指针大小的两倍。但这没关系,因为您用作对齐getpagesize()返回的值可能是。

我没有看到size的任何要求,但它可能不一定是否定的。