posix_memalign for std :: vector

Opt*_*Opt 7 c++ stl dynamic-memory-allocation

有没有办法posix_memalign std :: vector而不先创建向量的本地实例?我遇到的问题是我需要告诉posix_memalign分配多少空间我不知道怎么说

sizeof(std::vector<type>(n)) 
Run Code Online (Sandbox Code Playgroud)

没有实际创建新的矢量.

谢谢

GMa*_*ckG 10

嗯,这里有两种尺寸.它vector本身通常只是一个指针或两个指针分配的内存,无符号整数跟踪大小和容量.还有分配的内存本身,这是我认为你想要的.

你想要做的是制作一个vector将使用的自定义分配器.到时候,它会使用你的分配器,你可以拥有自己的特殊功能.我不会详细介绍分配器的详细信息,但具体内容如下:

template <typename T>
struct aligned_allocator
{
    // ...

    pointer allocate(size_type pCount, const_pointer = 0)
    { 
        pointer mem = 0;
        if (posix_memalign(&mem, YourAlignment, sizeof(T) * pCount) != 0)
        {
            throw std::bad_alloc(); // or something
        }

        return mem;
    }

    void deallocate(pointer pPtr, size_type)
    { 
        free(pPtr);
    }

    // ...
};
Run Code Online (Sandbox Code Playgroud)

然后你会像以下一样使用它:

typedef std::vector<T, aligned_allocator<T> > aligned_T_vector;

aligned_T_vector vec;
vec.push_back( /* ... */ ); // array is aligned
Run Code Online (Sandbox Code Playgroud)

但重申第一点,a的大小vector是相同的,无论它持有多少元素,因为它只指向一个缓冲区.只有该缓冲区的大小发生变化.