堆和堆栈内存使用问题
作者:互联网
在Windows操作系统中,堆栈内存是特定于线程的存储,而调用堆栈是一系列方法的逻辑流程.因此,每个线程都有其自己的堆栈区域.我想知道如何使用堆存储区吗?它是特定于线程的吗?具体过程?还是在.NET中,特定于AppDomian?还是在所有用户应用程序和操作系统之间共享?非常感谢.
解决方法:
堆是实现动态内存分配的最常见方法.使用堆的典型使用场景包括:直到运行时才知道要分配多少内存,或者所需的内存太大而无法在堆栈中分配.
一个进程可以容纳一个或多个堆.大多数进程的堆都超过了.例如,在Windows中,进程可以具有默认进程堆,CRT堆,并且应用程序可以调用Windows API创建自己的堆(使用API HeapCreate).
创建进程后,操作系统将为其创建一个名为“默认进程堆”的新堆,该堆实际上在大多数情况下很少使用.当我们调用new / delete和malloc / free时,实际上是在使用CRT堆.
Windows使用一些复杂的数据结构和算法来确保内存分配/释放和堆中的管理有效.但是,普遍的事实是,在堆中分配内存比在堆栈中分配内存要慢得多.
有关更多详细信息,您可以阅读Jeffrey Richter的精彩著作Windows via C/C++.您可以阅读Here,以快速了解Windows内部如何管理堆.
标签:operating-system,c,net 来源: https://codeday.me/bug/20191024/1918679.html