是否有一些很好的示例代码来显示糟糕的内存管理(例如程序员假设有垃圾收集)?
我想在课堂上证明这一点。我们使用的虚拟机有 16 个可用的硬件线程。
Chapel 最近的工作一直在努力减少程序员可能无意中泄漏内存的情况(例如,请参阅Chapel 1.18 发行说明中有关无删除编程的部分)。也就是说,分配类的实例是一种故意产生内存泄漏的方法:unmanaged
// run with --memTrack in order for the memoryUsed() call to work
use Memory;
class C {
var A: [1..1000000] real;
}
for i in 1..1000000 {
var myC = new unmanaged C();
writeln(memoryUsed());
}
具体来说,编译器不负责释放非托管类的实例;用户必须通过delete语句这样做。否则将导致该类的内存泄漏。
因此,上述的无泄漏版本将是:
// run with --memTrack in order for the memoryUsed() call to work
use Memory;
class C {
var A: [1..1000000] real;
}
for i in 1..1000000 {
var myC = new unmanaged C();
writeln(memoryUsed());
delete myC;
}