MAXDSIZ

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

コメントを残す