Я признаю, что у меня нет глубокого понимания D на данный момент, мои знания основываются исключительно на той документации, которую я прочитал, и на нескольких примерах, которые я пробовал.
В C ++ вы можете полагаться на идиому RAII для вызова деструктора объектов при выходе из их локальной области.
Можете ли вы в D?
Я понимаю, что D - это язык со сборкой мусора и что он также поддерживает RAII. Why does the following code not cleanup the memory as it leaves a scope then?
import std.stdio;
void main() {
{
const int len = 1000 * 1000 * 256; // ~1GiB
int[] arr;
arr.length = len;
arr[] = 99;
}
while (true) {}
}
The infinite loop is there so as to keep the program open to make residual memory allocations easy visible.
A comparison of a equivalent same program in C++ is shown below.
Можно видеть, что C ++ немедленно очистил память после выделения (частота обновления создает впечатление, будто было выделено меньше памяти), тогда как D сохранил ее, даже если он покинул область видимости.
Следовательно, когда происходит Очистка сборщика мусора?