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 って嘘だろ、おい。表示が間違ってるだけみたいだけど。