[C] malloc,vasprintf

2012/02/19 Programming::C
出直しLinux programming

malloc

mallocのman pageによると, 以下の記載があります.
とりあえず, vmさんがOOM killer発動しにくいようにしておいた方が良いでしょうね..
OOM killer自体も殺しておいた方が良いでしょう ;)
バグ
デフォルトでは、Linux は楽観的メモリ配置戦略を用いている。つまり、 malloc() が NULL でない値を返しても 、
そ のメモリが実際に利用可能であることが保証されない。これは本当にまずいバグである。システムがメモリ不足状
態になったとき、悪名高いメモリ不足解決器 (OOM killer) によって一つまたは複数のプロセスが削除される。突 然
あ るプロセスが削除されるのが望ましくない状況で使用されていて、しかもカーネルのバージョンが十分に最近のも
のであれば、このメモリを割り当て過ぎる動作 (overcommitting behavior) を以下のコマンドで無効にできる。
  # echo 2 > /proc/sys/vm/overcommit_memory
カーネルの付属文書の vm/overcommit-accounting と sysctl/vm.txt も参照のこと。

int vasprintf(char **strp, const char *fmt, va_list ap);

GNU拡張の関数。stdio.hで使える。
メモリ不足などのエラーは-1を返す。
strpにallocしてくれるのね、便利ですね。free()忘れないように。
OK キャンセル 確認 その他