gpt4 book ai didi

c# - 关于堆和栈内存使用的问题

转载 作者:行者123 更新时间:2023-11-30 15:11:26 26 4
gpt4 key购买 nike

在windows操作系统中,栈内存是线程专有的存储,调用栈是一系列方法的逻辑流程。所以每个线程都有自己的栈区。我想知道堆内存区域是如何使用的?它是特定于线程的吗?过程特定?或者在 .NET 中,AppDomian 特定?还是在所有用户应用程序和操作系统之间共享?非常感谢。

最佳答案

堆是实现动态内存分配最常见的方式。使用堆的典型使用场景包括在运行时之前不知道要分配多少内存,或者所需内存太大而无法在堆栈中分配。

一个进程可以持有一个或多个堆。大多数进程拥有的不仅仅是堆。例如在 Windows 中,一个进程可以有默认进程堆、CRT 堆,并且应用程序可以调用 Windows API 来创建它自己的堆(使用 API HeapCreate)。

当一个进程被创建时,操作系统会为它创建一个新的堆,称为默认进程堆,这在大多数情况下实际上很少被使用。当我们调用 new/delete 和 malloc/free 时,我们实际上是在使用 CRT 堆。

Windows 使用一些复杂的数据结构和算法来确保堆中的内存分配/解除分配和管理是有效的。然而,普遍的事实是在堆中分配内存比在堆栈中分配内存要慢得多。

有关更多详细信息,您可以阅读 Jeffrey Richter 的好书 Windows via C/C++。你可以阅读 Here快速了解堆在 Windows 内部是如何管理的。

关于c# - 关于堆和栈内存使用的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2368422/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com