本シリーズのトップページ |
---|
https://qiita.com/robozushi10/items/ca7c25dab3c279ba4e2b |
はじめに
本記事の趣旨は「01 概要」に記しているが、
要は 13年前(=2008年) に K&R をマネて実装した「自作メモリアロケータ」の振り返りである.
本項では次の (1)(2)(3) について記す.
(1) ユーザは「動的メモリ獲得・解放」のために、直にシステム関数(例: malloc, free) は使えない.
⬇️
(2) 「動的メモリ獲得・解放」を行いたい場合は、事前に「リソース申請」をしておく.
⬇️
(3) 「リソース申請」が通ると、「アクセッサ」が得られる (リソース割り当てが行われる).
詳細
(1) について
下記については、当時の開発現場(組み込み機器開発) のルールとして決められていた.
(1) ユーザは「動的メモリ獲得・解放」のために、直にシステム関数(例: malloc, free) は使えない.
(2) について
メールにて所定の書式で "リソース管理者" に申請していたと思う.
(2) 「動的メモリ獲得・解放」を行いたい場合は、事前に「リソース申請」をしておく.
(3) について
下記については次の意味である.
(3) 「リソース申請」が通ると、「アクセッサ」が得られる (リソース割り当てが行われる).
リソース管理者が、memrtbl[]
に対してレコードを追加する.
レコード追加し終えたら、id
(ここでは 1)を申請者に通知する.
memman_resource.c
/* メモリリソーステーブル *//* 型の定義は priv_memman_std.h にて */
#define MMAN_RESOURCE_BOTTOM \
{ -1, "", NULL, 0, 0, NULL, NULL, NULL, 0, 0, NULL}
mman_t
memrtbl[] =
{
/* [id] [key] [sem_id] [pshared] [sem val] [instance] [alloc func] [free func] [pool size] [rest size] [position]*/
+ // 申請者「main」用のレコードをリソーステーブルに追加する.
+ // このとき申請者「main」には id = 0 が割り当てられた
+ { 0, "main", NULL, 0, 0, NULL, NULL, NULL, 0, 0, NULL},
MMAN_RESOURCE_BOTTOM
};