如何在使用C时弄清楚Linux中的剩余堆栈

And*_*v93 3 c linux stack-overflow

我正在研究一个倾向于使用大量堆栈内存的程序.有没有办法可以找出堆栈上的剩余空间?这是在linux平台上.

谢谢!!

Emp*_*ian 6

有没有办法可以找出堆栈上的剩余空间

是的,有:对于主线程,你可以简单地&argc在main中记录一些全局(例如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");
}
Run Code Online (Sandbox Code Playgroud)

这只适用于主线程.如果您的应用程序是多线程的,则可以使用它pthread_getattr_np来查找有关当前线程堆栈的信息.