有没有办法在不首先创建向量的本地实例的情况下对 std::vector 进行 posix_memalign ?我遇到的问题是我需要告诉posix_memalign要分配多少空间,我不知道怎么说
sizeof(std::vector<type>(n))
没有实际创建一个新的向量。
谢谢
有没有办法在不首先创建向量的本地实例的情况下对 std::vector 进行 posix_memalign ?我遇到的问题是我需要告诉posix_memalign要分配多少空间,我不知道怎么说
sizeof(std::vector<type>(n))
没有实际创建一个新的向量。
谢谢
嗯,这里有两种尺寸。它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);
}
// ...
};
然后你会像这样使用它:
typedef std::vector<T, aligned_allocator<T> > aligned_T_vector;
aligned_T_vector vec;
vec.push_back( /* ... */ ); // array is aligned
但是重申第一点,vector
无论它持有多少个元素,a 的大小都是相同的,因为它只指向一个缓冲区。只有该缓冲区的大小会发生变化。