FreeBSD/i386 で、なにも設定していないときの1プロセスあたりの最大メモリサイズは512MB。でも、そんなんじゃ sequence analysis なんかできませんがな。
% limit datasize 524288 kbytes stacksize 65536 kbytes
これがデフォルトだ。んで、/boot/loader.conf に
kern.maxdsiz="2048m" kern.maxssiz="1024m"
と書いてやったところ、
% limit datasize 2097152 kbytes stacksize 1048576 kbytes
になった。いえーい。FreeBSD/amd64 とかだとどうなんでしょう?
テスト用に書いたコードはこんな感じ:
#include <stdio.h> #include <unistd.h> #include <stdlib.h> main(){ int s=1; void *p; for( s=1; s<=2048; s*=2 ){ printf("malloc %5dMB :", s); if ( (p = malloc(s *1024*1024)) == NULL ) printf("failed¥n"); else printf("OK¥n"); } }
FreeBSD/Linux/MacOS の32bit環境では 2048MB はダメ、Mac の ppc64 なら OK だった。
FreeBSD はもしかしたら、MAXDSIZ をもうちょっと増やせば 2048 はいけるかも。
Linux で limit たたいてみた結果:
% limit datasize unlimited stacksize 8192 kbytes
MacOS で limit :
% limit datasize 6144 kbytes stacksize 8192 kbytes
6144k って嘘だろ、おい。表示が間違ってるだけみたいだけど。