本シリーズのトップページ |
---|
https://qiita.com/robozushi10/items/ca7c25dab3c279ba4e2b |
はじめに
本記事の趣旨は「01 概要」に記しているが、
要は 13年前(=2008年) に K&R をマネて実装した「自作メモリアロケータ」の振り返りである.
本項では「ファイルの構成」と「Makefile」について記す
ファイル構成
$ tree . --charset=c
.
|-- Makefile
|-- main.c .............. アクセッサによる alloc と free の実行例
|-- memman.h ............ アクセッサの型定義、アクセッサのインスタンス化 API の定義
|-- memman.c ............ 上記 memman.h の実装部.
|-- priv_memman_core.h .. メモリチャンク(chunk)の型定義.
|-- memman_core.c ....... メモリチャンク(chunk)をリンクリストで管理する実装部.
|-- priv_memman_std.h ... リソース管理テーブルの型定義.
|-- memman_resource.c ... リソース管理テーブルの操作部.
| 「リソース申請」が通ると、🛑人が手動でテーブルの要素を1個追加する🛑
|-- priv_memman_debug.h . デバッグ用ログ関数を定義している
`-- memman_debug.c ...... デバッグ用ログ関数の実装部
Makefile
常に「デバッグあり」(-g
)で且つ「最適化なし」(-O0
)でコンパイル〜リンクが行う.
生成されるプログラム名は「memman」である.
PROGRAM=memman
SRCS=main.c \
memman.c \
memman_core.c \
memman_resource.c \
memman_debug.c
HDRS=memman.h \
priv_memman_core.h \
priv_memman_debug.h \
priv_memman_std.h
OBJS=$(SRCS:%.c=%.o)
CC = gcc
LIBPATH =
LIBS = -lpthread
CFLAGS = -Wall -g -O0 $(INCHEADER)
LDFLAGS = $(LIBPATH)
$(PROGRAM):$(SRCS) $(HDRS)
$(CC) $(CFLAGS) -o $(PROGRAM) $(SRCS) $(LDFLAGS) $(LIBS)
clean:
\rm -f $(PROGRAM) $(OBJS)