malloc問題
(1)
- mallocで1バイトを確保すると、たいてい16バイトを消費する。
- これは32bitの場合。64bitの場合はもっと消費するかも。
- 割り当て域は8バイト単位に切り上げられて、ヘッダにサイズと次の領域へのポインタが入るから。
- つまり確保したい容量のなんと16倍を消費することになる。
- これがわかっていると、小さい領域を確保するためにmallocを使うのは嫌だなと思う。サイズが小さいときは何か工夫して、大きな領域を切り分けて使うなどを検討する。
(2)
- しかしそれはプログラムが複雑になるだけだ。サイズが大きくても小さくても同じようにmallocできたら素敵じゃないか。
- ということで、1バイトを要求しても4バイトしか消費しないmallocを考えた。
- これだと効率はこうなる。
要求サイズ | 消費サイズ | 効率 |
1バイト | 4バイト | 25.0% |
5バイト | 8バイト | 62.5% |
9バイト | 12バイト | 75.0% |