不好的内存管理的好例子教堂代码?

时间:2019-02-08 14:50:13

标签: chapel

是否有一些很好的示例代码显示了较差的内存管理(例如,程序员认为存在垃圾回收)?

我想在上课时演示一下。我们正在使用的VM具有16个可用的硬件线程。

1 个答案:

答案 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;
}