在windows操作系統中,堆棧內存是一個線程專有的存儲,而調用堆棧是一系列方法的邏輯流程。所以每個線程都有自己的堆棧區域。我想知道堆memroy區域是如何使用的?它是線程特定的嗎?過程的具體情況?或者在.NET中,AppDomian特有的?還是在所有用戶應用程序和操作系統之間共享?非常感謝。關於堆棧和堆棧內存使用的問題
3
A
回答
3
堆是實現動態內存分配的最常見方式。使用堆的典型使用場景包括:在運行時不知道要分配多少內存,或者所需內存太大而無法在堆棧中分配時。
一個進程可以容納一個或多個堆。大多數流程不止一堆。例如,在Windows中,進程可以具有默認進程堆,CRT堆,並且應用程序可以調用Windows API來創建自己的堆(使用API HeapCreate)。
當一個進程被創建時,操作系統將爲它創建一個名爲Default Process Heap的新堆,這在大多數情況下實際上很少使用。當我們調用new/delete和malloc/free時,我們實際上正在使用CRT堆。
Windows使用一些複雜的數據結構和算法來確保堆中的內存分配/重新分配和管理是有效的。然而,共同的事實是,在堆中分配內存可能比在堆棧中慢得多。
欲瞭解更多詳細信息,您可以通過C/C++閱讀Jeffrey Richter的偉大書籍Windows。並且您可以閱讀Here以便快速瞭解如何在Windows內部管理堆。
1
1
「多個應用程序域可以在單個進程中運行,但每個應用程序域都有自己的一組數據,因此也有自己的堆。」
你確定賈斯汀,我與加載另一個DLL到一個單獨的應用程序域並執行它,然後定期報告的內存使用一個簡單的命令行應用實驗。
獨立DLL中的代碼被設計爲逐漸消耗內存。
結果是,consol應用程序報告在其自己的應用程序域中分配的數量增加,直到由於在單獨的應用程序域下單獨的DLL中運行的線程上的內存不足異常而導致整個批次被減少。
在運行.NET 2的32位XP SP3機器上觀察到此行爲,並且會聲明單獨的AppDomain共享相同的進程堆。
如果這不是別人的經驗,我很想知道如何從有毒的DLL
相關問題
- 1. 關於「推」和堆棧的問題
- 2. 棧和堆內存
- 3. 堆棧問題
- 4. 我有問題關於堆棧
- 5. JVM - 堆棧和堆棧
- 6. 堆棧char問題
- 7. 問題與堆棧
- 8. Lua堆棧問題
- 9. Wicket,頁面堆棧和內存使用
- 10. WebAssembly堆棧/堆棧指針初始化和內存佈局
- 11. PHP調用堆棧問題
- 12. 的memcpy堆棧內存
- 13. Android中的堆棧內存
- 14. 基於堆棧的內存分配
- 15. 有趣的堆棧問題?
- 16. Java中的堆棧問題
- 17. 堆棧溢出(關於「evhttp_uri_parse」)
- 18. 內存中的堆棧實際上是一個堆棧嗎?
- 19. 堆棧幀和堆棧指針
- 20. 希望堆棧堆棧?
- 21. .NET堆棧內存限制
- 22. C堆棧內存佈局
- 23. 堆棧內存位置
- 24. 堆棧幀內存分配
- 25. C++堆棧跟蹤問題
- 26. LINQ堆棧大小問題
- 27. Viewcontroller堆棧理解問題
- 28. 問題安裝MEAN堆棧
- 29. Highcharts堆棧列問題
- 30. Android活動堆棧問題
刪除從我的回答實際內存限制隔離我的應用程序,因爲它們不是問題的關鍵... – 2010-03-03 03:54:19