D є системною мовою програмування. Таким чином, D дозволяє вручну керувати пам'яттю. Проте, ручне керування пам'яттю є причиною багатьох системних помилок, тому D використовує збирач сміття за замовчуванням, щоб виділяти та звільняти пам'ять, яка вже не використовується.
D забезпечує вказівні типи T*
, як у мові програмування C:
int a;
int* b = &a; // b містить адресу a
auto c = &a; // c має тип int* та містить адресу a
Новий блок пам'яті у купі (heap) виділяється за допомогою оператора
new
, який повертає вказівник на керовану пам'ять:
int* a = new int;
Як тільки на пам'ять, яку використовує a
, перестане посилатись
будь-яка змінна у програмі, збирач сміття звільнить цю пам'ять.
D має три різних рівня безпеки для функцій: @system
, @trusted
, та
@safe
. За замовчуванням використовується рівень @system
. @safe
рівень є підмножиною D, яка запобігає помилок пам'яті архітектурно.
@safe
код можуть викликати тільки інші @safe
чи @trusted
функції.
Крім того, явна арифметика вказівників заборонена у @ safe
коді:
void main() @safe {
int a = 5;
int* p = &a;
int* c = p + 5; // помилка
}
@trusted
функції є функціями, які потрібно перевіряти вручну. Вони
дозволяють організувати з'єднання між SafeD та брудним світом низького
рівня.