В недавней работе в Chapel была предпринята попытка уменьшить количество случаев, когда программист может невольно утратить память (например, см. Раздел о программировании без удаления в примечаниях к выпуску для Chapel1,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;
}