std::矢量和内存分配

std::vector and memory allocation

本文关键字:内存 分配 std      更新时间:2023-10-16

似乎每次向std::vector添加新元素时,如果没有空元素,则分配的元素数量会增加一倍(至少在GCC 4.9中是这样)。我认为这样做是为了实现分摊的恒定时间复杂性。

例如,运行此代码后:

v.push_back (1);
v.push_back (2);
v.push_back (3);
v.push_back (4);
v.push_back (5);
v.shrink_to_fit(); // capacity is 5 now
v.push_back (6);
std::cout << v.capacity () << std::endl;

输出为10。

在内存受限的系统中,有没有任何方法可以防止这种行为,即使它是以性能损失为代价的?

此外,是否可以表明它应该只分配固定数量的元素,而不是加倍?

我知道我可以在添加新元素之前调用std::vector::reserve(),但在我的情况下似乎很混乱。。。调用std::vector::shrink_to_fit()是另一种方法,但也不方便。

不,没有办法。

你唯一的选择是编写自己的矢量数据结构,这样你就可以用它做任何你想做的事情(或者你可以复制internet/c++库的一个实现,然后改变你需要的东西,并将新矢量包含在你的程序中)。

实际上,您还可以使用数组和realloc命令。