D Динамические массивы - RAII

Я признаю, что у меня нет глубокого понимания 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++ v D

Можно видеть, что C ++ немедленно очистил память после выделения (частота обновления создает впечатление, будто было выделено меньше памяти), тогда как D сохранил ее, даже если он покинул область видимости.

Следовательно, когда происходит Очистка сборщика мусора?

5
задан Community 19 March 2014 в 07:42
поделиться