在 C 中检查可用的堆栈大小

标签 c stack mingw

我将 MinGW 与 GCC 3.4.5 (mingw-special vista r3) 一起使用。

我的 C 应用程序使用了很多堆栈,所以我想知道是否有任何方法可以通过编程告诉剩余多少堆栈,这样我就可以在发现即将用完时干净地处理这种情况。

如果不是,您还有什么其他方法可以解决可能用完堆栈空间的问题?

我不知道我将从什么大小的堆栈开始,因此还需要以编程方式确定它。

最佳答案

getrusage 函数为您提供当前使用情况。 (参见 man getrusage)。

Linux 中的 getrlimit 将通过 RLIMIT_STACK 参数帮助获取堆栈大小。

#include <sys/resource.h>
int main (void)
{
  struct rlimit limit;

  getrlimit (RLIMIT_STACK, &limit);
  printf ("\nStack Limit = %ld and %ld max\n", limit.rlim_cur, limit.rlim_max);
}

请看man getrlimit . 可以通过 ulimit -sulimit -a 堆栈大小行获取相同的信息。 还可以查看允许设置限制的 setrlimit 函数。 但是正如其他答案中提到的那样,如果您需要调整堆栈,那么您可能应该重新考虑您的设计。如果你想要一个大数组,为什么不从堆中取出内存?

关于在 C 中检查可用的堆栈大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53827/

相关文章:

c# - 具有定义大小的特殊队列

c++ - 让 GDC 前端发出中间 C/C++ 代码?

c - 这是在堆上优化多维数组的可能方法吗?

c - msgrcv - SA_RESTART 标志不起作用

matlab - 什么时候可以传递函数句柄?

我可以通过 add sp 等恢复堆栈吗

c - 如何读取特定字符串的标准输入并对它们执行 bool 运算?

java - 以C/C++和其他语言重现Java原语hashCode逻辑的库

c++ - 交叉编译时 Boost stacktrace 不 demangling 名称

c - 为什么 -2147483648 可以放入 int 时自动提升为 long?