3 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊
雷蒙·陳(The Old New Thing)對(duì)于此類問題有一個(gè)很好的答案:
如果需要詢問,可能是您做錯(cuò)了。
這是有關(guān)堆棧分配的Win32詳細(xì)信息:MSDN。
如果您認(rèn)為自己可能受到堆??臻g的限制,那么幾乎可以肯定會(huì)受到可用虛擬內(nèi)存的限制,在這種情況下,您將需要找到其他解決方案。
您到底想做什么?

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
getrusage函數(shù)可獲取當(dāng)前用法。(請(qǐng)參見man getrusage)。
在getrlimitLinux中,將有助于獲取與堆棧大小RLIMIT_STACK參數(shù)。
#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);
}
請(qǐng)看一下man getrlimit。相同信息可以按行ulimit -s或ulimit -a堆棧大小行獲取。也看一下setrlimit可以設(shè)置限制的功能。但是,如其他答案中所述,如果您需要調(diào)整堆棧,那么您可能應(yīng)該重新考慮您的設(shè)計(jì)。如果要一個(gè)大數(shù)組,為什么不從堆中取出內(nèi)存呢?

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
將局部變量的地址從堆棧中取出將起作用。然后,在一個(gè)更嵌套的調(diào)用中,您可以減去另一個(gè)本地的地址,以找出它們之間的差異
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;
}
如果您的代碼是多線程的,則需要處理每個(gè)線程的top_of_stack變量。
- 3 回答
- 0 關(guān)注
- 819 瀏覽
添加回答
舉報(bào)