请问下Raymond等高手在heap中_heap_segment是什么时候创建的?

Windows内核调试

请问下Raymond等高手在heap中_heap_segment是什么时候创建的?


jlflyfox 2009-07-08, 16:00 下午

看《软件调试》的heap那里,对heap_segment理解有些疑惑!

按我的理解应该是某个Heap预分配的堆空间用完了扩展的时候就创建_heap_segment了,但我测试发现有两个疑问:

1、如果刚好用完,再次分配的时候,如果分配字节很大,就不会创建_heap_segment

2、只有比较小的时候,才会有_heap_segment,而这个新的segment似乎都是1024k,而且reserved空间比较大,但我发现有些程序的扩展空间很大啊,reserved空间也很大

3、在不断分配后,再释放,reserved空间大小是否可以变大,如P653解除提交那么说的

 

Re: 请问下Raymond等高手在heap中_heap_segment是什么时候创建的?


格蠹老雷 2009-07-11, 17:00 下午

问题1,对的,如果分配的堆块大小超过了可以使用普通堆块方式来分配的阈值,那么就使用大虚拟内存块的方式了,参见P655页图下面那一段。这个和当前的堆段是否用完没有关系。

问题2,这是根据创建堆时的参数来决定的。参见P647

问题3, 这要看释放堆块的总大小了,超过一个_HEAP结构中的一个阈值后,便会解除提交,那么保留的空间便变大了。

Powered by Community Server Powered by CnForums.Net