0

是否有一些很好的示例代码来显示糟糕的内存管理(例如程序员假设有垃圾收集)?

我想在课堂上证明这一点。我们使用的虚拟机有 16 个可用的硬件线程。

4

1 回答 1

2

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;
}
于 2019-02-08T16:47:22.593 回答