糟糕内存管理的好例子 Chapel 代码?
Good example Chapel code for bad memory management?
是否有一些很好的示例代码来显示糟糕的内存管理(例如,程序员假设存在垃圾收集)?
我想在 class 期间展示这一点。我们使用的 VM 有 16 个可用的硬件线程。
Chapel 最近的工作一直在努力减少程序员可能无意中泄漏内存的情况的数量(例如,请参阅 免删除编程 部分 release notes for Chapel 1.18).也就是说,分配 unmanaged
classes 的实例是一种产生故意内存泄漏的方法:
// 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());
}
具体来说,编译器不负责释放非托管 classes 的实例;用户必须通过 delete
语句这样做。如果不这样做,将导致 class 的内存泄漏。
因此,上述内容的无泄漏版本为:
// 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;
}
是否有一些很好的示例代码来显示糟糕的内存管理(例如,程序员假设存在垃圾收集)?
我想在 class 期间展示这一点。我们使用的 VM 有 16 个可用的硬件线程。
Chapel 最近的工作一直在努力减少程序员可能无意中泄漏内存的情况的数量(例如,请参阅 免删除编程 部分 release notes for Chapel 1.18).也就是说,分配 unmanaged
classes 的实例是一种产生故意内存泄漏的方法:
// 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());
}
具体来说,编译器不负责释放非托管 classes 的实例;用户必须通过 delete
语句这样做。如果不这样做,将导致 class 的内存泄漏。
因此,上述内容的无泄漏版本为:
// 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;
}