Open3

D言語でGCをオフにする方法

lempijilempiji
  • BetterCモード
    • そもそも言語機能のレベルでGCの機能が取り除かれるので new もできない
  • 実行時フラグ
    • GCの機能は存在するが、起動時からオフとなっている状態。 import core.memory; GC.enable(); で機能が復活する。
    • やり方は、実行時オプションとして --DRT-gcopt=disable:1 をつける。ソースに埋め込む方法もある。
  • import core.memory; GC.disable();
    • GCの機能は存在しており、起動時はオンとなっている状態。一時的に無効化する意味合いが強い。
lempijilempiji

部分的にGCを無効にしたコードが書きたい場合は @nogc 属性をつける。
ファイルの先頭に @nogc: を書けばほとんどの範囲でGCは発生しないことが保証される。
@nogc void main() {} とすればすべてのコードはGCが起きないことが保証される。

ただしクラスや構造体のメソッドには継承されないので、宣言ごとに @nogc: を書く必要がある。

lempijilempiji

@nogc void main() {} であっても static this() {}shared static this() {} の範囲ならGCが使える。これは main よりも前段階で処理されるので、 main に対する属性付与の影響を受けないため。これはすべてのファイルの先頭で @nogc: を付ければ良い。