3 回答
TA贡献1804条经验 获得超7个赞
雷蒙·陈(The Old New Thing)对于此类问题有一个很好的答案:
如果需要询问,可能是您做错了。
这是有关堆栈分配的Win32详细信息:MSDN。
如果您认为自己可能受到堆栈空间的限制,那么几乎可以肯定会受到可用虚拟内存的限制,在这种情况下,您将需要找到其他解决方案。
您到底想做什么?
TA贡献1851条经验 获得超5个赞
getrusage函数可获取当前用法。(请参见man getrusage)。
在getrlimitLinux中,将有助于获取与堆栈大小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可以设置限制的功能。但是,如其他答案中所述,如果您需要调整堆栈,那么您可能应该重新考虑您的设计。如果要一个大数组,为什么不从堆中取出内存呢?
TA贡献1884条经验 获得超4个赞
将局部变量的地址从堆栈中取出将起作用。然后,在一个更嵌套的调用中,您可以减去另一个本地的地址,以找出它们之间的差异
size_t top_of_stack;
void Main()
{
int x=0;
top_of_stack = (size_t) &x;
do_something_very_recursive(....)
}
size_t SizeOfStack()
{
int x=0;
return top_of_stack - (size_t) &x;
}
如果您的代码是多线程的,则需要处理每个线程的top_of_stack变量。
- 3 回答
- 0 关注
- 781 浏览
添加回答
举报