知識マップ: Adaのメモリ管理 ── アクセス型・Controlled型・ストレージプールの使い分け
記事「Adaのメモリ管理 ── アクセス型・Controlled型・ストレージプールの使い分け」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
Adaでnewを使うとき、値はアクセス型ごとのストレージプールから確保される。Unchecked_Deallocationで解放すると渡した変数はnullになるが、同じ領域を指すほかのアクセス値は残り、ダングリング参照になる。アクセシビリティ検査は寿命の短い変数を指す値の保存を止め、SPARKは所有権の規則で、確保した領域に読み書きできるアクセス値を同時に1つに限る。Controlled型はFinalizeに解放を書くことでC++のRAIIと同じ役割を担う。GNATは長さの決まらない戻り値をセカンダリスタックに置き、Ada.Containersは要素の確保と解放を引き受ける。ダングリング参照による読み取りとメモリリークは、Valgrindで確かめられる。
flowchart LR
accTitle: Adaのメモリ管理の知識マップ
accDescr: アクセス型がストレージプールから領域を確保し、Unchecked_Deallocationによる解放がダングリング参照の原因になりうること、アクセシビリティ検査とSPARKがそれを防ぎ、Controlled型がRAIIの役割を担うこと、ValgrindやGNATのセカンダリスタック、サブプール、Ada.Containersとの関係を示す図。
ada_access_type["アクセス型"]
ada_storage_pool["ストレージプール(Ada)"]
ada_controlled_type["Controlled型(Ada)"]
gnat["GNAT"]
ada["Ada(プログラミング言語)"]
gnat_secondary_stack["セカンダリスタック(GNAT)"]
ada_unchecked_deallocation["Ada.Unchecked_Deallocation"]
dangling_pointer["ダングリング参照"]
ada_accessibility_rules["アクセシビリティ規則"]
spark["SPARK"]
gnatprove["GNATprove"]
valgrind["Valgrind"]
memory_leak["メモリリーク"]
raii["RAII(Resource Acquisition Is Initialization)"]
ada_storage_subpool["サブプール(Ada)"]
ada_containers["Ada.Containers"]
gnat -->|"実装を担う"| ada
gnat -.->|"利用する"| gnat_secondary_stack
ada_access_type -->|"利用する"| ada_storage_pool
ada_unchecked_deallocation -->|"前提とする"| ada_access_type
ada_unchecked_deallocation -->|"原因になり得る"| dangling_pointer
ada_accessibility_rules -.->|"防止する"| dangling_pointer
spark -.->|"防止する"| dangling_pointer
spark -->|"利用する"| gnatprove
dangling_pointer -.->|"で確認できる"| valgrind
memory_leak -.->|"で確認できる"| valgrind
ada_controlled_type -->|"実装を担う"| raii
ada_controlled_type -.->|"利用する"| ada_unchecked_deallocation
ada_controlled_type -.->|"軽減する"| memory_leak
ada_storage_subpool -->|"前提とする"| ada_storage_pool
ada_containers -.->|"軽減する"| memory_leak
概念間の関係(全15件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- GNATはAda(プログラミング言語)の実装を担います。
- GNATはセカンダリスタック(GNAT)を利用します。
- アクセス型はストレージプール(Ada)を利用します。
- Ada.Unchecked_Deallocationはアクセス型を前提とします。
- Ada.Unchecked_Deallocationはダングリング参照の原因になることがあります。
- アクセシビリティ規則はダングリング参照を防ぎます。
- SPARKはダングリング参照を防ぎます。
- SPARKはGNATproveを利用します。
- ダングリング参照はValgrindで確認できます。
- メモリリークはValgrindで確認できます。
- Controlled型(Ada)はRAII(Resource Acquisition Is Initialization)の実装を担います。
- Controlled型(Ada)はAda.Unchecked_Deallocationを利用します。
- Controlled型(Ada)はメモリリークを軽減します。
- サブプール(Ada)はストレージプール(Ada)を前提とします。
- Ada.Containersはメモリリークを軽減します。
主要概念の定義
機械可読データ
このデータセットについて
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。