2010-07-12 43 views
1

我希望瞭解如何對保存在存儲器中的用戶級線程的堆棧內存。我認爲所有的堆棧都將從頁面邊界開始......我是對的嗎?如何在用戶級線程庫確保棧某線程不會成長,並與其他線程的連續頁面邊界疊重疊,因爲所有的堆棧頁將是連續...內存爲多個用戶級線程堆棧

回答

0

這些都是實現細節並因系統而異。你想達到什麼目的?

+0

這是一個普遍懷疑...不是試圖完成一些具體的事情......但仍然可以說Linux的用戶級線程庫......在更廣闊的角度如何將多個線程的堆棧內存保存在內存中... – 2010-07-12 04:32:58

+0

無法用您提供的信息回答您的問題。這是一個非常依賴於實現的問題,如果沒有特定的目標(CPU架構,操作系統版本,調用約定,線程模型),則沒有答案。 – 2010-07-12 15:34:43

0

如果你堅持連片疊,那麼,你可以有分配單獨的線程棧之間的衝突。對於虛擬空間較小的機器而言,這種情況更可能發生,而且某些堆棧可能會變得很大。

最常見的操作系統(Windows,Linux)假定線程堆棧不能很大(例如1-10Mb),並且你不能有很多線程(可能是幾百個)處理。在這種情況下,如果在計算狀態之前知道需要多少線程,以及每個堆棧可以達到多大,則實際上並沒有問題。在這種情況下,您可以預先計算放置所有線程堆棧的位置,使其適合每個堆棧的最壞情況需求。

而這個工程....不錯。但是,如果堆棧的需求可以任意大,或者您不知道堆棧有多少,則預分配不起作用。這確實會導致人們使用這些操作系統的麻煩。

對於這個問題的討論,請參閱Why are stack overflows still a problem?。您也可以閱讀我的回答,以瞭解如何避免此問題。 (提示:沒有限制的堆棧!)。