D Language
Memoria e puntatori
Ricerca…
Sintassi
- & <variabile> - accesso per riferimento (= ottiene il puntatore ai dati della variabile)
- * <variabile> - operatore deferenza (= ottiene l'oggetto dati da un puntatore)
- <tipo> * - tipo di dati che punta a <tipo> (es. `int *)
puntatori
D è un linguaggio di programmazione del sistema e consente quindi di gestire e confondere manualmente la memoria. Tuttavia, D utilizza un garbage collector per impostazione predefinita per liberare memoria non utilizzata.
D fornisce i tipi di puntatore T * come in C:
void main()
{
int a;
int* b = &a; // b contains address of a
auto c = &a; // c is int* and contains address of a
import std.stdio : writeln;
writeln("a ", a);
writeln("b ", b);
writeln("c ", c);
}
Allocando sul mucchio
Un nuovo blocco di memoria sull'heap viene allocato utilizzando la new
espressione, che restituisce un puntatore alla memoria gestita:
void main()
{
int* a = new int;
*a = 42; // dereferencing
import std.stdio : writeln;
writeln("a: ", *a);
}
@safe D
Non appena la memoria referenziata da a non viene più referenziata attraverso alcuna variabile nel programma, il garbage collector ne libera la memoria.
D consente inoltre l'aritmetica del puntatore, tranne nel codice contrassegnato come @safe
.
void safeFun() @safe
{
writeln("Hello World");
// allocating memory with the GC is safe too
int* p = new int;
}
void unsafeFun()
{
int* p = new int;
int* fiddling = p + 5;
}
void main()
{
safeFun();
unsafeFun();
}
Per ulteriori informazioni su SafeD, consultare l' articolo del team di progettazione D.
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow