Open3
D言語でGCをオフにする方法
- BetterCモード
- そもそも言語機能のレベルでGCの機能が取り除かれるので
new
もできない
- そもそも言語機能のレベルでGCの機能が取り除かれるので
- 実行時フラグ
- GCの機能は存在するが、起動時からオフとなっている状態。
import core.memory; GC.enable();
で機能が復活する。 - やり方は、実行時オプションとして
--DRT-gcopt=disable:1
をつける。ソースに埋め込む方法もある。
- GCの機能は存在するが、起動時からオフとなっている状態。
-
import core.memory; GC.disable();
- GCの機能は存在しており、起動時はオンとなっている状態。一時的に無効化する意味合いが強い。
部分的にGCを無効にしたコードが書きたい場合は @nogc
属性をつける。
ファイルの先頭に @nogc:
を書けばほとんどの範囲でGCは発生しないことが保証される。
@nogc void main() {}
とすればすべてのコードはGCが起きないことが保証される。
ただしクラスや構造体のメソッドには継承されないので、宣言ごとに @nogc:
を書く必要がある。
@nogc void main() {}
であっても static this() {}
や shared static this() {}
の範囲ならGCが使える。これは main
よりも前段階で処理されるので、 main
に対する属性付与の影響を受けないため。これはすべてのファイルの先頭で @nogc:
を付ければ良い。