gpt4 book ai didi

c++ - std::vector 的 posix_memalign

转载 作者:可可西里 更新时间:2023-11-01 18:27:44 25 4
gpt4 key购买 nike

有没有办法在不先创建 vector 的本地实例的情况下对 std::vector 进行 posix_memalign?我遇到的问题是我需要告诉posix_memalign分配多少空间,我不知道怎么说

sizeof(std::vector<type>(n)) 

实际上没有创建新的 vector 。

谢谢

最佳答案

嗯,这里有两种尺寸。 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

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

关于c++ - std::vector 的 posix_memalign,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2340311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com