知識マップ: Adaのメモリ管理 ── アクセス型・Controlled型・ストレージプールの使い分け

記事「Adaのメモリ管理 ── アクセス型・Controlled型・ストレージプールの使い分け」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

Adaでnewを使うとき、値はアクセス型ごとのストレージプールから確保される。Unchecked_Deallocationで解放すると渡した変数はnullになるが、同じ領域を指すほかのアクセス値は残り、ダングリング参照になる。アクセシビリティ検査は寿命の短い変数を指す値の保存を止め、SPARKは所有権の規則で、確保した領域に読み書きできるアクセス値を同時に1つに限る。Controlled型はFinalizeに解放を書くことでC++のRAIIと同じ役割を担う。GNATは長さの決まらない戻り値をセカンダリスタックに置き、Ada.Containersは要素の確保と解放を引き受ける。ダングリング参照による読み取りとメモリリークは、Valgrindで確かめられる。

Adaのメモリ管理の知識マップアクセス型がストレージプールから領域を確保し、Unchecked_Deallocationによる解放がダングリング参照の原因になりうること、アクセシビリティ検査とSPARKがそれを防ぎ、Controlled型がRAIIの役割を担うこと、ValgrindやGNATのセカンダリスタック、サブプール、Ada.Containersとの関係を示す図。実装を担う利用する利用する前提とする原因になり得る防止する防止する利用するで確認できるで確認できる実装を担う利用する軽減する前提とする軽減するアクセス型ストレージプール(Ada)Controlled型(Ada)GNATAda(プログラミング言語)セカンダリスタック(GNAT)Ada.Unchecked_Deallocationダングリング参照アクセシビリティ規則SPARKGNATproveValgrindメモリリークRAII(Resource Acquisition Is Initialization)サブプール(Ada)Ada.Containers

概念間の関係(全15件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

アクセス型
オブジェクトやサブプログラムを指す値を持つAdaの型で、ほかの言語のポインタや参照に当たる。accessだけで宣言するプール固有のアクセス型はその型のnewで作った値だけを指し、access allなどで宣言する汎用のアクセス型はaliasedを付けた変数も指せる。
ストレージプール(Ada)
アクセス型のnewが領域を確保する場所。アクセス型ごとにStorage_PoolやStorage_Sizeで指定でき、Root_Storage_Poolを継承してAllocate・Deallocate・Storage_Sizeを上書きすると独自のプールを作れる。
Controlled型(Ada)
Ada.FinalizationのControlledまたはLimited_Controlledから派生し、Initialize・Adjust・Finalizeを上書きして、既定の初期化・代入・スコープを出るときの処理を定義できるAdaの型。
GNAT
GCCに含まれる無償のAdaコンパイラで、Adaの代表的な処理系。
Ada.Unchecked_Deallocation
newで確保したオブジェクトを明示的に解放するために、オブジェクトの型とアクセス型を渡してインスタンス化するAdaの標準のジェネリック手続き。解放に渡した変数はnullになるが、同じオブジェクトを指すほかのアクセス値は検査しない。
アクセシビリティ規則
アクセス型と指す先のオブジェクトの寿命(アクセシビリティレベル)を比べ、指す先より長く残るアクセス値を作らせないAdaの規則。静的に違反が分かればコンパイルエラーになり、実行時の検査(accessibility check)に失敗するとProgram_Errorが発生する。
SPARK
プログラムの性質を数学的に証明できるように設計された、Adaのサブセット(部分言語)とそのツール群。
ダングリング参照
すでに存在しないオブジェクトを指すポインタや参照。参照外しすると、意図しないデータを読み書きする。Adaの参照マニュアルは、これを参照した実行をerroneous(結果が規格で定まらない)としている。
メモリリーク
確保したメモリを解放し忘れ、Private BytesやCommitが増え続ける現象。
サブプール(Ada)
Ada 2012で追加された、1つのストレージプールを複数に分ける仕組み。newで確保先のサブプールを指定でき、Unchecked_Deallocate_Subpoolでサブプールごとまとめて解放できる。
Ada.Containers
Ada 2005で標準に加わった、ベクタ・リスト・マップ・集合などの要素の集まりを扱うAdaの標準パッケージ群。

機械可読データ

このデータセットについて

作成
合同会社小村ソフト
ライセンス
CC BY 4.0 ── 出典(合同会社小村ソフト)とライセンスへのリンクを明示し、改変した場合はその旨を示すことを条件に、再配布・改変を含めて再利用できます
最終確認日
2026-11-01 ── 収録する関係のうち、最後に出典と照合した日

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。