看《软件调试》的heap那里,对heap_segment理解有些疑惑!
按我的理解应该是某个Heap预分配的堆空间用完了扩展的时候就创建_heap_segment了,但我测试发现有两个疑问:
1、如果刚好用完,再次分配的时候,如果分配字节很大,就不会创建_heap_segment
2、只有比较小的时候,才会有_heap_segment,而这个新的segment似乎都是1024k,而且reserved空间比较大,但我发现有些程序的扩展空间很大啊,reserved空间也很大
3、在不断分配后,再释放,reserved空间大小是否可以变大,如P653解除提交那么说的
问题1,对的,如果分配的堆块大小超过了可以使用普通堆块方式来分配的阈值,那么就使用大虚拟内存块的方式了,参见P655页图下面那一段。这个和当前的堆段是否用完没有关系。
问题2,这是根据创建堆时的参数来决定的。参见P647
问题3, 这要看释放堆块的总大小了,超过一个_HEAP结构中的一个阈值后,便会解除提交,那么保留的空间便变大了。