我希望瞭解如何對保存在存儲器中的用戶級線程的堆棧內存。我認爲所有的堆棧都將從頁面邊界開始......我是對的嗎?如何在用戶級線程庫確保棧某線程不會成長,並與其他線程的連續頁面邊界疊重疊,因爲所有的堆棧頁將是連續...內存爲多個用戶級線程堆棧
1
A
回答
0
這些都是實現細節並因系統而異。你想達到什麼目的?
0
如果你堅持連片疊,那麼,你可以有分配單獨的線程棧之間的衝突。對於虛擬空間較小的機器而言,這種情況更可能發生,而且某些堆棧可能會變得很大。
最常見的操作系統(Windows,Linux)假定線程堆棧不能很大(例如1-10Mb),並且你不能有很多線程(可能是幾百個)處理。在這種情況下,如果在計算狀態之前知道需要多少線程,以及每個堆棧可以達到多大,則實際上並沒有問題。在這種情況下,您可以預先計算放置所有線程堆棧的位置,使其適合每個堆棧的最壞情況需求。
而這個工程....不錯。但是,如果堆棧的需求可以任意大,或者您不知道堆棧有多少,則預分配不起作用。這確實會導致人們使用這些操作系統的麻煩。
對於這個問題的討論,請參閱Why are stack overflows still a problem?。您也可以閱讀我的回答,以瞭解如何避免此問題。 (提示:沒有限制的堆棧!)。
相關問題
- 1. 內核堆棧與用戶模式應用程序堆棧
- 2. C程序的堆棧和堆內存
- 3. 線程堆和堆棧
- 4. 內存分配,堆棧和堆棧
- 5. 用戶線程(OS Windows)的內核模式堆棧是什麼?
- 6. 棧和堆內存
- 7. 如何回收Java線程堆棧使用的內存?
- 8. 當線程堆棧使用的內存被釋放時
- 9. 多線程堆內存訪問
- 10. 多個堆棧和堆放在虛擬內存中的位置?
- 11. 線程堆棧上存儲了什麼?
- 12. 堆棧溢出VS多線程
- 13. 線程堆棧大小不匹配本機內存跟蹤線程堆棧大小
- 14. 內核級和用戶級線程
- 15. 繪製堆棧和線程程序堆
- 16. 內存中的堆棧實際上是一個堆棧嗎?
- 17. 從C程序更改堆棧內存
- 18. Windows程序使用多少個堆棧?
- 19. Linux - 獲取線程的堆棧內存的開始和結束
- 20. 分配給線程的堆棧內存來自哪裏?
- 21. 如何監視內存的Java線程堆棧
- 22. 無法在其他線程的堆棧上釋放內存
- 23. Java線程堆棧內存分配和管理
- 24. 在堆棧內存中存儲引用
- 25. 找出哪個對象/數組使用最多堆棧內存
- 26. 多線程程序在C:計算線程堆棧空間
- 27. 爲什麼GHC爲每個線程都有一個堆棧?
- 28. 堆棧內存的iostream
- 29. .NET堆棧內存限制
- 30. 堆棧內存位置
這是一個普遍懷疑...不是試圖完成一些具體的事情......但仍然可以說Linux的用戶級線程庫......在更廣闊的角度如何將多個線程的堆棧內存保存在內存中... – 2010-07-12 04:32:58
無法用您提供的信息回答您的問題。這是一個非常依賴於實現的問題,如果沒有特定的目標(CPU架構,操作系統版本,調用約定,線程模型),則沒有答案。 – 2010-07-12 15:34:43