kbcl0のページ#6
(9) 主要関数一覧
- void kerrorExit(const char *s, ...)
- s以降をstderrにfprintfしてから、exit(EXIT_FAILURE)する。
- [memo] 単にエラー処理を1行減らすために用意したもの。
- void *kerrorExitP0(void *p, const char *s, ...)
- もしpが0でなければ、何もしないでpを返す。
- もしpが0ならs以降でkerrorExitする。
- [memo] 単にエラー処理をさらに1行減らすために用意したもの。ポインタで0を返したらエラーという仕様の関数は多いため。
- KPtrPool [class]
- KPtrPool(int s) [コンストラクタ]
- サイズsバイト専用のmalloc/free代用機構として初期化される。
- void *alloc()
- メモリをプールから取得する。プールが空の場合は、標準関数のmallocでプールを補充してから取得処理が行われる。
- void free(void *p)
- メモリをプールに返す。どんなにたくさん返されても、標準関数のfreeを使ってシステムにメモリを返すことはしない。すべてプールにため込まれて再利用を待つ。
- [memo] kclib1_0005での実験によると、KPtrPoolは標準関数のmalloc/freeに比べて18.5倍速くらいの速度が出る。
- KMalloc [class]
- void *kmalloc.alloc(int s)
- void kmalloc.free(int s, void *p)
- メモリをkmallocに返す。この時サイズsを再度指定しなければいけないのが標準関数のfreeとの大きな相違点。
- void *kmalloc.realloc(int s0, int s1, void *q)
- void kmalloc.report(FILE *fp)
- kmallocの利用状況をレポートする。デバッグ用。
- int kmalloc.inUse()
- kmallocが割り当て中のメモリの合計を返す。主にデバッグ用。
- [memo] 処理の前後でのinUse()の値の差を求めると、メモリリークにいち早く気付くことができて非常に重宝する。
- KPtrPool kmalloc.ptrPool(int s)
- サイズsのメモリの管理を担当しているKPtrPoolへのポインタを返す。
- void kmalloc.ready()
- もしkmallocが未初期化であれば確実に初期化する。
- [memo] kmallocはKMallocクラスのオブジェクトで、グローバル変数として最初から用意されている。
- [memo] KMallocはKPtrPoolを100個以上使って実装されている。kclib1_0005によると、KMallocは標準関数のmalloc/freeに比べて12.5倍速くらいの速度が出る。
- KSizPtr [class]
- [memo] コンストラクタはkmallocを利用するので、それより前に初期化することはできない。
- KAutoreleasePool [class]
- [memo] コンストラクタはkmallocを利用するので、それより前に初期化することはできない。
こめんと欄