malloc(3)のチューニング
malloc(3)のチューニング方法はちょっと変っていて、mallocの設定内容をリンク先したシンボリックリンクを/etc/malloc.confに作成する(環境変数でも同じ設定ができるけど)。
$ man 3 malloc ... FILES /etc/malloc.conf symbolic link to filename containing option flags EXAMPLES To set a systemwide reduction of cache size, and to dump core whenever a problem occurs: ln -s 'A<' /etc/malloc.conf To specify in the source that a program does no return value checking on calls to these functions: extern char *malloc_options; malloc_options = "X"; ...
/usr/src/lib/libc/stdlib/malloc.c ... 438 for (i = 0; i < 3; i++) { 439 if (i == 0) { 440 errnosave = errno; 441 j = readlink("/etc/malloc.conf", b, sizeof b - 1); 442 errno = errnosave; 443 if (j <= 0) 444 continue; 445 b[j] = '\0'; 446 p = b; 447 } else if (i == 1) { 448 p = getenv("MALLOC_OPTIONS"); 449 } else { 450 p = malloc_options; 451 } 452 for (; p != NULL && *p != '\0'; p++) { 453 switch (*p) { 454 case '>': malloc_cache <<= 1; break; 455 case '<': malloc_cache >>= 1; break; 456 case 'a': malloc_abort = 0; break; 457 case 'A': malloc_abort = 1; break; 458 case 'h': malloc_hint = 0; break; ...
おお、readlink(2)一発で読めるのか。普通にファイルを読むのに比べると随分簡単だ。どうせ環境変数と設定の記述フォーマットが同じで単純なんだし、これはこれでシンプルでいい。