|
1
9
应用程序使用的RAM不是一种精确的方法来判断内存是否已被语义释放。 释放的内存是可以重用的内存。不过,有时候,在操作系统报告的应用程序使用的内存中,您不会直接观察到释放的内存。 您知道内存是释放的,因为语言的语义是这样说的。 |
|
|
2
2
实际上,如果以下代码没有泄漏:
以下代码 不应该 泄漏:
这适用于您使用的任何类型
我建议你用
|
|
|
3
2
正如Daniel提到的,应用程序使用的RAM不一定是内存泄漏的指示器。 关于您注意到的向量行为,向量保证内存布局是连续的,因此,当您创建大小为99999999的向量时,所有99999999元素将按顺序排列,并将构成相当大的内存块。删除这肯定会影响进程大小。一个映射的行为不同(根据维基百科,它通常被实现为一个自平衡的二叉树),所以我猜删除它会导致进程内存空间中的碎片,也许是因为进程内存不会立即下降。 检测内存泄漏的最佳方法是使用Valgrind这样的工具,它可以清楚地指示出哪里出了问题。 |
|
|
4
1
为了确定你是否在释放内存,试着在你的对象的析构函数中添加可观察的效果…观察他们。 例如,创建自定义类而不是映射,该类在调用析构函数时发出输出。 像这样:
您将看到删除指针会像预期的那样调用对象的析构函数。 |
|
|
Julia · 矢量中相加为总和S的值的数量 3 年前 |
|
|
C_Rod · 在模板方法中确定STL容器中项目的数据类型 4 年前 |
|
|
quantumwell · 将空向量放入std::map() 8 年前 |
|
|
OutOfBound · 对未初始化内存使用算法的优点 8 年前 |
|
|
DarthRubik · 在使用列表删除之后,迭代器如何不无效 8 年前 |