6
有没有办法posix_memalign一个std :: vector而不先创建一个向量的本地实例? 我现在遇到的问题是,我需要告诉posix_memalign多少空间分配,我不知道怎么说posix_memalign for std :: vector
sizeof(std::vector<type>(n))
,而不实际创建一个新的载体。
谢谢
有没有办法posix_memalign一个std :: vector而不先创建一个向量的本地实例? 我现在遇到的问题是,我需要告诉posix_memalign多少空间分配,我不知道怎么说posix_memalign for std :: vector
sizeof(std::vector<type>(n))
,而不实际创建一个新的载体。
谢谢
那么,这里有两种尺寸。 vector
本身通常不过是指向一些分配内存的指针或两个指针,而无符号整数跟踪大小和容量。还有分配的内存本身,这是我认为你想要的。
你想要做的是做一个自定义的分配器,vector
将使用。当它到了时候,它会使用你的分配器,你可以拥有自己的特殊功能。我不会去了一个分配器的full details,但具体细节:
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
但重申第一点,的大小不管有多少元素,它都是一样的,因为它只指向一个缓冲区。只有该缓冲区的大小发生变化。