gpt4 book ai didi

c++ - windows下至少有多少堆有一个软件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:05:15 24 4
gpt4 key购买 nike

我发现 C 运行时有自己的堆(以及 Windows HeapWalk 下的所有堆 API..)。关于我以前的知识,我有点麻烦,因为看起来一个进程实际上有几个堆,而不仅仅是一个。这样对吗 ?如果是这样,为什么需要多个堆?

最佳答案

一个 Windows 进程通常至少有 3 个堆:

  • 默认进程堆。 GlobalAlloc() 从中分配,主要由 Windows 使用
  • COM 堆。 CoTaskMemAlloc() 和 SysAllocString() 从它分配,由任何 COM 服务器使用
  • CRT 堆。 new 运算符和 malloc() 函数从中分配。

拥有多个 CRT 堆并不少见,任何使用/MT 构建的 DLL 都有自己的 CRT 拷贝,因此拥有自己的堆。不考虑只从单个堆分配的确切原因对我来说是模糊的。

GetProcessHeaps() 函数可用于迭代进程中的所有堆。


更新:模糊的部分变得模糊了一点。从 VS2012 开始,CRT 现在从默认进程堆分配,第一个项目符号。请记住,这不会追溯更改未重建的旧 DLL 上的行为。

关于c++ - windows下至少有多少堆有一个软件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6640344/

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