LoginSignup
0
0

More than 1 year has passed since last update.

[03] C言語の独自メモリアロケータの振り返り ... 「リソース申請」

Last updated at Posted at 2021-08-06
本シリーズのトップページ
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
 };
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0