Хороший пример кода часовни для плохого управления памятью? - PullRequest
0 голосов
/ 08 февраля 2019

Есть ли хороший пример кода, демонстрирующий плохое управление памятью (например, программист предполагает, что происходит сборка мусора)?

Я хотел бы продемонстрировать это во время урока.Виртуальная машина, которую мы используем, имеет 16 доступных аппаратных потоков.

1 Ответ

0 голосов
/ 08 февраля 2019

В недавней работе в 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;
}
...