apacheモジュールのメモリ管理

物欲日記ばっかり書かずに、たまにはお勉強の話でも。

fp = ap_pfopen(p, hoge.txt, "r");

if (fp == NULL) {
    fprintf(stderr, "%sは無いよ!\n", hoge.txt);
    return 1;
}

/* hoge.txt を色々弄って・・・*/

ap_pfclose(p, fp);

apacheのモジュールについて最近勉強しているので、やったことをメモしていこうと思ってます。色々調べてて、メモリとかファイルハンドル回りでほーほーと思ったことをいくつか。

  • apacheモジュールはC言語にも関わらず、メモリのリソース管理はapacheがよしなにしてくれる。
  • apacheはリソース管理のためにプール構造をとっている。
  • 新たに確保するメモリ等はプールに結び付けて管理されるので、プール破棄時にメモリも破棄されるわけですな。
  • というか、むしろメモリ開放のインターフェイスすら用意されてない。
  • リソースプールからアロケートされたメモリの開放はapache自身がすることになってる。
  • かってにプログラマがfree()とかしたらダメ。
  • リクエスト時などに、一時的にメモリ確保とかファイルハンドルを割り当てたい場合は、Request poolを生成して、そこから割り当てれば、レスポンス終了時にRequest poolが自動的に破棄されて、メモリとかも開放される。
  • 動的にメモリ確保する場合も、poolにから割り当てるので、NULLチェックの必要が無い。

ほーほー、ようするにCなのにメモリ管理は、用途によって用意された各種poolからpool生成して、そっからアロケートするから、プログラマが適当にメモリを弄るなってことなのね。