是否有一些很好的示例代码显示了较差的内存管理(例如,程序员认为存在垃圾回收)?
我想在上课时演示一下。我们正在使用的VM具有16个可用的硬件线程。
答案 0 :(得分:2)
Chapel的最新工作一直在尝试减少程序员可能无意间泄漏内存的情况(例如,请参见release notes for 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;
}