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