25

私は、遊んでみたい個人的なプロジェクトに D を使用することを検討している C++ プログラマーです。ガベージ コレクターを完全に無効にする方法があるかどうか、またそうするとどのようなリスクがあるのか​​疑問に思っていました。

new と delete をオーバーライドして malloc と free を使用することで、自分のメモリを管理できることはわかっていますが、そうする場合は、ガベージ コレクターをまったく実行しないほうがよいでしょう。

4

4 に答える 4

8

malloc と free を使用する場合は、std.c.stdlibを使用します。GC がこれらに触れることはありません。std.gcには、disable() を含むメモリ管理に必要なものがすべて含まれています。

しかし、GC は悪いことではありません。ほとんどすべてではないにしても、ほとんどの D のライブラリには、メモリが明示的に削除されていないコードのどこかがあるため、常にメモリをオフにしてもヒーローにはなりませんが、重要なパフォーマンス要件がある場合は問題ありません。

GC を使用すると、呼び出し元が参照をどこにも格納しなくても、配列のスライスやパラメーターでの新しいオブジェクトの作成など、すべての生産性が大幅に向上します。優れたコードはそれよりもはるかに少なく、GC を使用するとコードははるかに小さくなります。

于 2009-01-23T07:20:02.553 に答える
2

私はD言語について読んでいました.Dで新しいと思われる仕様でこれを見つけました:

40.ベターC

-betterC は dmd のコマンド ライン フラグであり、コンパイラによる特定のランタイム機能のサポートを制限します。特に、betterC でコンパイルされた D プログラムまたはライブラリは、Druntime とリンクされていません。コンパイル時機能の使用は、決して制限されません。 https://dlang.org/spec/betterc.html

このコマンドライン フラグを使用した結果の 1 つは、GC と言語機能の中継を無効にすることです。

40.1 結果

Druntime が利用できないため、多くの D 機能が動作しません。例えば:

  • ガベージ コレクション
  • スレッドローカル ストレージ
  • TypeInfo と ModuleInfo
  • クラス
  • 組み込みスレッド (例: core.thread)
  • 動的配列 (スライスを除く) と連想配列
  • 例外
  • 文字列で切り替える
  • 最終スイッチ
  • 同期およびcore.sync
  • 静的モジュールのコンストラクターまたはデコンストラクター
  • 構造体デコンストラクター
  • unittest (テストは -betterC フラグを使用して通常どおり行うことができます)

https://dlang.org/blog/2017/08/23/d-as-a-better-c/も参照してください

于 2018-01-02T22:35:45.543 に答える
1

GC を削除して、malloc/free の単純なラッパーに置き換えることができます。

于 2009-01-23T16:32:26.680 に答える