std::矢量和内存分配
std::vector and memory allocation
似乎每次向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
命令。
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配