2012-08-14 21 views
1

可能重複:
Printing the stack trace in C++ (MSVC)?C++ - 在運行時展開棧

我怎麼可以在需要時自動擴展堆棧? (直到最大我決定)

我想創建的東西,得到函數指針(隨機一個,我不知道什麼函數真的需要),並創建它的光纖。 但我需要創建很多光纖,但是當他們需要更多的默認值時,我希望它自動擴展,直到我決定爲止。

原因:我需要創建很多光纖,如果我用它們創建大堆棧,那麼它在RAM中也會佔用大量內存。但是如果我創建一個小堆棧,它會拋出異常。 (堆棧溢出)

但是應該有大堆棧和小堆棧,然後我需要在運行時自動擴展它。

+1

這不是重複的。 casperOne,你的大腦不在了嗎? – MessyCode 2012-08-22 23:34:05

回答

1

如果您使用CreateFiberEx來創建光纖,則可以使用較小的提交堆棧大小和較大的備用堆棧大小。但請注意,無論您爲保留指定的內容是否從系統可用的總內存中刪除。但是,除非您需要它,否則它不會承諾使用RAM。細節描述爲here

+0

你能說出它有多慢嗎?需要很長時間才能擴展?通過它乘以當前的堆棧? – MessyCode 2012-08-14 22:25:58

+0

@MessyCode:我無法親自告訴你。但是從解釋它的工作原理來看,性能損失可能類似於從堆中分配更多內存。該頁面表示一次分配64KB。 – jxh 2012-08-14 22:30:05

+0

哦,我以爲它會重新分配整個堆棧,然後將堆棧複製到新堆棧,然後刪除最後一個堆棧。謝謝。 – MessyCode 2012-08-14 22:31:50