在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. 关于堆栈和堆的说明
- 6. 使用Python堆栈问题
- 7. C程序的堆栈和堆内存
- 8. 堆栈和堆内存的影响?
- 9. 我有问题关于堆栈
- 10. JVM - 堆栈和堆栈
- 11. 堆栈和堆栈内存存储在C++
- 12. Java堆和堆栈内存分配
- 13. Lua堆栈问题
- 14. 堆栈char问题
- 15. 问题与堆栈
- 16. 堆栈vs堆栈内存使用情况C++用于动态创建的类
- 17. Wicket,页面堆栈和内存使用
- 18. WebAssembly堆栈/堆栈指针初始化和内存布局
- 19. 其他内存区域(堆栈和堆栈除外)?
- 20. 调用堆栈问题
- 21. PHP调用堆栈问题
- 22. OOP和堆/堆栈
- 23. 块,堆栈和堆
- 24. 堆栈在java中使用堆栈
- 25. 堆栈内存的iostream
- 26. Android中的堆栈内存
- 27. 的memcpy堆栈内存
- 28. Java中的堆栈问题
- 29. 有趣的堆栈问题?
- 30. 有关堆栈分配的问题C
删除从我的回答实际内存限制隔离我的应用程序,因为它们不是问题的关键... – 2010-03-03 03:54:19