我发现C-runtime有自己的堆(以及windows HeapWalk下的所有Heap API).关于我以前的知识,我似乎有点麻烦,看起来这个过程实际上是几个堆而不仅仅是一个.这样对吗 ?如果是这样的话,为什么需要几个堆呢?
Windows进程通常至少有3个堆:
拥有多个CRT堆的情况并不少见,使用/ MT构建的任何DLL都有自己的CRT副本,从而获得自己的堆.我没想到只从一个堆中分配的确切原因对我来说是模糊的.
GetProcessHeaps()函数可用于迭代进程中的所有堆.
更新:黑暗的部分有点不受影响.从VS2012开始,CRT现在从默认进程堆中分配第一个项目符号.请记住,这不会追溯性地更改未重建的旧DLL上的行为.