Я признаю, что на данный момент у меня нет глубокого понимания D, мои знания основаны исключительно на том, какую документацию я прочитал, и на нескольких примерах, которые я пробовал.
В C ++ вы могли бы полагаться на идиому RAII длявызвать деструктор объектов при выходе из локальной области видимости.
Можете ли вы в D?
Я понимаю, что D - это язык для сборки мусора, и он также поддерживает RAII.Почему следующий код не очищает память, так как тогда он выходит из области видимости?
import std.stdio;
void main() {
{
const int len = 1000 * 1000 * 256; // ~1GiB
int[] arr;
arr.length = len;
arr[] = 99;
}
while (true) {}
}
Существует бесконечный цикл, позволяющий держать программу открытой, чтобы сделать видимыми остаточные выделения памяти.
Сравнение аналогичной программы на C ++ показано ниже.
Видно, что C ++ сразу же очищал память после выделения (частота обновления заставляет его выглядеть так, как будто было выделено меньше памяти), тогда как D сохранял его, даже несмотря на то, что он оставил область действия.
Следовательно, когда очищается ГХ?