D Language
メモリとポインタ
サーチ…
構文
- &<variable> - 参照によるアクセス(=変数のデータへのポインタを取得)
- * <variable> - デフレクション演算子(=ポインタからデータオブジェクトを取得する)
- <type> * - <type>を指すデータ型(例えば `int *)
ポインタ
Dはシステムプログラミング言語なので、手動で管理してメモリを台無しにすることができます。それにもかかわらず、Dはデフォルトでガベージコレクタを使用して未使用メモリを解放します。
DはCのようなポインタ型T *を提供します:
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);
}
ヒープに割り当てる
ヒープ上の新しいメモリブロックは、管理対象メモリへのポインタを返すnew
式を使用して割り当てられます。
void main()
{
int* a = new int;
*a = 42; // dereferencing
import std.stdio : writeln;
writeln("a: ", *a);
}
@セーフD
aによって参照されるメモリがプログラム内の変数によって参照されなくなると、ガベージコレクタはメモリを解放します。
Dは@safe
とマークされたコードを除いて、ポインタ演算も可能@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();
}
SafeDの詳細については、Dデザインチームの記事を参照してください 。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow