* acl4_003: malloc/freeの拡張
-(by [[K]], 2025.11.28)

** (1)
-C言語はmalloc/freeが弱いと思います。
-メモリリーク(開放忘れ)があっても気づきにくいですし、間違って二重freeをしたらmallocのチェインが壊れてめちゃくちゃになります。freeしたメモリにfree後にアクセスしても何も言われません。これを何とかしないといけません。
-これがC言語で放置されていたから、ガーベージコレクションやRustの所有権の概念が生まれて発達したのです(と私は思っています)。
-C言語がもっとしゃんとすれば、C言語だってまだまだ現役なのです(いやさすがにそれは無理かもしれない・・・ほかの言語が進んでいるところはここだけではないので)。

-acl4では、ADgbLv>=2であれば、これらをすべて検出します。

-acl4では、コンパイル時に検出するのではなく、実行時に検出します。したがって、コンパイル時に検出できるRustの所有権には劣ります。その代わり実行時検出にすることで、所有権という新しい概念は不要で、単に「確保したものを確実に返し、返した後に触らない」を守ればいいことになります。

** (2)
-acl4のメモリアロケータが持つ機能:
--malloc, realloc, free
--一括free用のmalloc, 一括free用のデストラクタ登録(一括freeではreallocは扱わない)
--一括処理の移譲
--子アロケータの作成
--下請けアロケータとしてのmalloc, free

-acl4の標準メモリアロケータ:
--AMASystem : stdlibのmalloc/freeを呼ぶだけのもの
--AMASimple : 一括開放以外では解放されたふりをすることで高速化
--AMAFixSiz : 特定の固定サイズに特化し、それ以外は親アロケータに移譲する


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS