【发布时间】:2010-11-01 05:05:53
【问题描述】:
我对与向量相关的内存管理感到非常困惑,并且可以解释一些基本概念。
我有一个使用大向量的程序。 我使用 new 运算符创建了向量,并在程序结束时使用 delete 释放它们以获得记忆回来了。
我的问题是,如果程序由于某种原因崩溃或中止,delete 行将被遗漏,有没有办法恢复内存,即使在这个场景。
我还分配了一些其他大型向量,但没有使用 new 关键字。 我已经读过这些将在堆上创建,但无论如何都不需要释放,因为内存管理是在“幕后”处理的。 但是我不确定情况是否如此,因为每次运行我的程序都会丢失 RAM。
所以我的第二个问题是,没有 new 关键字创建的向量是否真的可以留给他们自己的设备,并且即使代码在中间中止,也可以信任他们自己清理流。
我想第三个刚刚浮现在脑海中的问题是,如果向量是在堆上自动创建的,你为什么要对它们使用 new 关键字? 谢谢阅读, 本
【问题讨论】:
-
“每次我运行我的程序都会丢失 RAM”是指“我的可用 RAM 会变小,直到我退出程序”还是“即使我退出程序,我的可用 RAM 也会变小,并且下次我运行时它会变得更小,直到有一天我完全没有内存了”?
-
我附议 Max 的问题。我相信 Windows 实际上不会卸载已终止的程序,除非它需要。这样他们在第一次之后就可以更快地启动。
-
“我想我想到的第三个问题是,如果向量是在堆上自动创建的,你为什么要对它们使用 new 关键字?”如果您需要将向量传递到当前范围之外的点,您只需要这样做。这在实践中比较少见。