在Windows操作系统中,堆栈内存是线程特定的存储,调用堆栈是一系列方法的逻辑流程。因此,每个线程都有自己的堆栈区域。我想知道堆内存区域如何使用?它是线程特定的吗?进程特定的吗?或者在.NET中,是AppDomain特定的?还是在所有用户应用程序和操作系统之间共享?非常感谢。
一个进程内可以运行多个应用程序域,但每个应用程序域都有自己的数据集合和堆。
你确定吗Justin?我已经尝试了一个简单的命令行应用程序,它将另一个DLL加载到一个单独的应用程序域中并执行它,然后定期报告内存使用情况。
单独的DLL中的代码被设计为逐渐消耗内存。
结果是控制台应用程序报告其自己的应用程序域中分配的内存量增加,直到整个应用程序由在单独应用程序域下运行的线程的内存不足异常关闭。
这种行为在运行.NET 2的32位XP SP3机器上观察到,并且表明单独的应用程序域共享同一进程堆。
如果其他人的经验不是这样的,我很想知道如何使我的应用程序免受有毒的DLL的影响。