http://www.kmonos.net/alang/d/garbage.html
ガベージコレクトされたプログラムの方が高速です。 これは直感に反するかもしれませんが、その理由は:
明示的なメモリ管理の際によく使われる手法は、参照カウントです。 代入があるたびにカウントを増やしたり減らしたリソースを挿入するのは、 速度低下の原因になっています。スマートポインタクラスでラップしても、 速度的な解決にはなりません。
(またいずれにせよ、 循環参照を削除できない参照カウント方式は、 一般的な解決策ではありません。)
オブジェクトによって獲得されたリソースの解放には、 デストラクタが使用されます。多くのクラスでは、このリソースとは 割り当てられたメモリのことです。
GCを使えば、 ほとんどのデストラクタが空になり、完全に削除してしまえます。
メモリ管理のためのデストラクタは、 オブジェクトがスタックに置かれたときに影響が顕著になります。
例外が発生したときに、全てのスタックフレームでデストラクタが呼び出され、 メモリを解放するような仕組みが必要となるのです。 もしデストラクタが関係しなければ、例外を処理する特別なスタックフレームを 設定する必要がなくなり、コードは高速に実行されます。
メモリ管理に必要なコードは全てを合わせるとちょっとした量になります。 大きなプログラムになるほど、キャッシュに入らない部分が増え、 ページングが多く発生し、 プログラムが遅くなります。
GCは、メモリが残り少なくなってきたときのみ実行されます。 メモリに余裕があれば、プログラムは全速力で実行され、 メモリ解放に一切時間を取られません。
モダンなGCは、過去の遅いものより遙かに発展しています。 世代型のコピーGCには、 昔のマーク&スイープアルゴリズムの非効率さはありません。
モダンなGCはヒープの詰め直しを行います。 これによってプログラムが活発に参照するページの数を減らし、 キャッシュヒット率を高め、 スワップ回数が減ります。
GCを使うプログラムは、メモリリークの積み重ねで次第にパフォーマンスが悪化、 という事態に縁がありません。
次世代言語28 TypeScript Swift Go Kotlin Rust Nim
■ このスレッドは過去ログ倉庫に格納されています
853デフォルトの名無しさん
2022/09/16(金) 21:27:14.70ID:z5XcLMe6■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【北区小学校火災】女性教師「電気ストーブ近くで洗濯物を乾かしていた」 失火とみて捜査 燃えた残骸に“繊維片”付着 ★5 [Ailuropoda melanoleuca★]
- 【W杯】元ブラジル代表ロナウド氏「日本には簡単に勝てる」決勝T1回戦で対戦可能性…避けたいのは「オランダ」 ★2 [首都圏の虎★]
- 《独裁に党内から異論噴出!》高市首相 暴かれた本性 〈木下秘書の陰謀論「文春は中国から毎週1000万円もらっている」〉 | 週刊文春 [少考さん★]
- 「名古屋ほど適した場所ない」 広沢市長、副首都法案提出めぐり [首都圏の虎★]
- AKB48から契約解除の花田藍衣 丸刈りめぐり運営側を非難、対抗する姿勢「何年かかってでも戦っていきます」 [ひかり★]
- 仏でエボラ熱感染初確認 [首都圏の虎★]
- 【実況】博衣こよりのえちえちこども裁判クイズ🧪★3
- 【実況】博衣こよりのえちえちこども裁判クイズ🧪★2
- 安倍政権の肝いりで誕生した「クールジャパン機構」、累積損失が540億円に。政府は廃止や統合を検討 [663766621]
- チンポーン
- 【大爆笑】高市、アメリカにインターンで行ってただけだった。連邦議会立法調査官とは一体… [744361492]
- 伊佐「どの会社のトップも交渉相手に『忙しいから』とか『寝てない』とか絶対言わない」 ウヨ「なんでダメなん?(略」 [358195575]