本シリーズのトップページ |
---|
https://qiita.com/robozushi10/items/ca7c25dab3c279ba4e2b |
はじめに
書籍『プログラミング言語C』(通称 K&R) には、
簡易な malloc と free (以降「動的メモリ獲得・解放」)の実装例がある.
13年前(=2008年) に K&R をマネて、次の「自作メモリアロケータ」を実装をしていたようで、
13年ぶりに同コードを見た.
良い機会なので、C言語のポートフォリオ(作品)を兼ねて、該当コードを振り返ることにした.
自作メモリアロケータ
(1) ユーザは「動的メモリ獲得・解放」のために、直にシステム関数(例: malloc, free) は使えない.
⬇️
(2) 「動的メモリ獲得・解放」を行いたい場合は、事前に「リソース申請」をしておく.
⬇️
(3) 「リソース申請」が通ると、「アクセッサ」が得られる (リソース割り当てが行われる.
⬇️
(4) 「アクセッサ」は「動的メモリ獲得・解放」を持つ関数ポインタ「alloc」「free」を提供する.
⬇️
(5) ユーザはアクセッサの関数ポインタ「alloc」と「free」に対して、任意のメモリ操作関数を設定する.
⬇️
(6) ユーザはアクセッサを使って初回に必要なメモリプールを獲得する. (以後、拡張・縮小はできない).
⬇️
(7) 以後、ユーザはアクセッサを介してメモリプールからメモリ獲得・解放をする
補足
13年ぶりにコードを見ると, 完全に赤の他人のコードであった.
たぶん職場でこのようなメモリ管理の機構を採用していたので、自宅で実装練習をしたのだろう.
(コーディングスタイルも当時の職場のものであった)
さらに補足
正直、本コードがどこまで正確に動作するのかは不明である.
ただ、13年ぶりに本コードの main関数(単体テスト)が動いたので、ある程度動作するのだろう.