多くのスタック メモリを使用する傾向があるプログラムに取り組んでいます。スタックの残りのスペースを見つける方法はありますか? これは Linux プラットフォーム上にあります。
ありがとう!!
多くのスタック メモリを使用する傾向があるプログラムに取り組んでいます。スタックの残りのスペースを見つける方法はありますか? これは Linux プラットフォーム上にあります。
ありがとう!!
スタックの残りのスペースを見つける方法はありますか
はい。&argc
_ int *g_addr_argc
_getrlimit(RLIMIT_STACK, ...)
char a_local;
struct rlimit rlim_stack;
if (getrlimit(RLIMIT_STACK, &rlim_stack) == 0 &&
rlim_stack.rlim_cur != RLIM_INFINITY &&
(uintptr_t)g_addr_argc - (uintptr_t)&a_local > rlim_stack.rlim_cur - 8192) {
fprintf(stderr, "Danger: getting too close to the stack limit\n");
}
これはメインスレッドでのみ機能します。アプリケーションがマルチスレッドの場合、 を使用pthread_getattr_np
して現在のスレッド スタックに関する情報を見つけることができます。
を使用setrlimit
して、コード内でスタック サイズを自分で設定できます。その後、不思議に思う必要はありません。必要に応じて (合理的な範囲内で) 増やすことができます。
#include <sys/resource.h>
int main (int argc, char **argv)
{
const rlim_t kStackSize = 16 * 1024 * 1024; // min stack size = 16 MB
struct rlimit rl;
int result;
result = getrlimit(RLIMIT_STACK, &rl);
if (result == 0)
{
if (rl.rlim_cur < kStackSize)
{
rl.rlim_cur = kStackSize;
result = setrlimit(RLIMIT_STACK, &rl);
if (result != 0)
{
fprintf(stderr, "setrlimit returned result = %d\n", result);
}
}
}
// ...
return 0;
}