我将 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 -s
或 ulimit -a
堆栈大小行获取相同的信息。
还可以查看允许设置限制的 setrlimit
函数。
但是正如其他答案中提到的那样,如果您需要调整堆栈,那么您可能应该重新考虑您的设计。如果你想要一个大数组,为什么不从堆中取出内存?
关于在 C 中检查可用的堆栈大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53827/