0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[01] C言語の独自メモリアロケータの振り返り ... 概要

Last updated at Posted at 2021-08-06
本シリーズのトップページ
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関数(単体テスト)が動いたので、ある程度動作するのだろう.

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?