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

  • 的大小必须为2的幂次方
  • 和sizeof(void *)
  • 的倍数

    我试过这个电话,看看会发生什么
     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。

    最佳答案

    manual



    要清楚,这是posix_memalign的声明

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

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

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

    关于c++ - posix_memalign是否应该在错误的大小上失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29169129/

    10-14 14:19
    查看更多