D är ett systemprogrammeringsspråk och tillåter därför manuell hantering av minnet. Med det sagt är manuell minneshantering en källa till många fel, så D använder sig av en skräpsamlare (garbage collector) som standardmetod för att hantera minnestilldelningar.
D erbjuder pekartyper T*
likt som i programmeringsspråket C:
int a;
int* b = &a; // b innehåller adressen till a
auto c = &a; // c är int* och innehåller adressen till a
Ett nytt minnesblock på heapen kan allokeras med uttrycket new
som returnerar en pekare till det allokerade minnet.
int* a = new int;
Så fort minnet adresserat av a
inte länge hänvisas till av någon variabel
i programmet, frigörs minnet av skräpsamlaren.
Det finns tre säkerhetsnivåer för funktioner i D: @system
, @trusted
och @safe
. Om inget annat anges är @system
standard. @safe
är en delmängd av D som förhindrar minnesfel genom att förbjuda vissa operationer. @safe
kod kan endast anropa andra @safe
eller @trusted
funktioner. Vidare är manuell pekararitmetik förbjuden i @safe
kod:
void main() @safe {
int a = 5;
int* p = &a;
int* c = p + 5; // Fel
}
@trusted
funktioner måste verifieras manuellt av programmeraren och gör det möjligt att skapa en koppling mellan SafeD och den underliggande osäkra lågnivådelen av D-program.
NOTERA: Följande länkar är på engelska