Linux スレッドスタックサイズの決め方
Linux では、スレッドのスタックサイズは、以下の2つの方法で計算できます。
- ulimit コマンドによる方法:現在のユーザーのスタックサイズ制限を確認および変更するには、ulimit コマンドを使用します。現在のユーザーのスタックサイズ制限を確認するには、次のコマンドを実行します。
ulimit -s
デフォルトでは、スタック・サイズは 8192 KB に制限されています。次のコマンドを使用してスタック・サイズの制限を設定できます。
ulimit -s <size>
内部メモリ・ハードウェアスタックサイズの単位は、KBで設定します。
- getrlimitとsetrlimit関数を使用して:getrlimitとsetrlimit関数を使用して、スタックサイズの制限を取得および設定できます。
#include <sys/resource.h>
void get_stack_limit() {
struct rlimit limit;
getrlimit(RLIMIT_STACK, &limit);
printf("Current stack limit: %lu\n", limit.rlim_cur);
}
void set_stack_limit(size_t size) {
struct rlimit limit;
limit.rlim_cur = size;
limit.rlim_max = size;
setrlimit(RLIMIT_STACK, &limit);
}
get_stack_limit関数は現在のスタックサイズ制限を取得し、set_stack_limit関数はスタックサイズ制限を設定します。サイズパラメーターは、バイト単位でのスタックサイズ制限です。
スタックサイズ制限が一般的にプロセスレベルのものであってスレッドレベルではないことに注意してください。スレッドの作成時に、スレッドのスタックサイズはプロセスのスタックサイズ制限の影響を受けます。したがって、特定のスレッドのスタックサイズを設定する場合は、スレッドを作成する前にプロセスのスタックサイズ制限を設定することができます。