清晰的载体有效C++
Clear vector of vectors effectively C++
我遇到了需要创建 2 级或 3 级嵌套向量的问题,但我遇到了内存未正确清除的问题。所以我做了这个简单的测试:
void test(){
vector<vector<double>> myContainer;
vector<double> vec = {1};
for (int i=0; i<20000000; ++i)
{
myContainer.push_back(vec);
}
FreeAll(myContainer);
}
其中 FreeAll(( 是一个模板函数,定义如下:
template <typename T>
void FreeAll( T & t ) {
T tmp;
t.swap(tmp);
}
现在,在 main(( 中调用函数 test((,我们会发现即使在离开测试函数的作用域后,仍然有很多剩余的内存仍然存在,并且在 main 终止之前内存不会被清除。
可能是我创建太多矢量的原因? 这里也没有任何类型的内存泄漏,因为所有存储都是自动的。
在这种情况下,没有任何类型的内存泄漏,并且从 Ubuntu 的默认系统监视器中发生了内存观察。
因此,在main((中调用test((4次并检查最后3次调用是否会分配更多内存或从先前的分配中重用它,结果证明不会再分配内存并且内存确实是可重用的,并且只有在程序终止后才会释放。相反,创建一个双精度向量并推送相同数量的双精度并调用 FreeAll((,它实际上会立即释放内存并返回到操作系统。
相关文章:
- 欧拉项目#8答案是大以获得有效答案
- 调整大小后指向元素值的指针unordered_map有效?
- 为什么是0;C++中的有效语句
- 最高有效数字侧的第N位
- GCC对可能有效的代码抛出init list生存期警告
- 有效地使用std::unordered_map来插入或增加键的值
- c++中O(n^(1/3))中一个数的除数的有效计数
- 使用无符号字符数组有效存储内存
- 自定义先决条件对移动分配运算符有效吗
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 为什么这种直接初始化有效?(C++17)
- 递归函数有效,但无法记忆
- 在C++中初始化向量映射的最有效方法
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- 钳制迭代器是否有效
- 如何有效地在 std::vector 中插入一对?
- C++模板 t 不是有效的模板类型
- 检查由括号、方括号和大括号组成的一组方括号是否有效?
- 将此布尔值传递给此函数的最有效方法是什么?