vc6程序main之前和之后的示意图(call stack),执行前内核先调用mainCRTStartup()函数,_heap_alloc_base()函数对内存分配有两种情况,小于1016字节,调用_sbh_alloc_block,管理小内存。大于1016字节使用windows调用HeapAlloc进行内存分配。
vc10程序call stack,sbh调用深埋到OS的HeapAlloc内,由操作系统管理小内存块,sbh_alloc_block,sbh_alloc_new_region,sb_alloc_new_group在新版里没有了。
_heap_init动作:先从内存申请4096(BYTES_PER_PAGE)字节,供之后sbh_heap_init使用。_sbh_heap_init从_crtheap申请16个申请HEADER,
HEADER介绍bitvEntryHi,bitvEntryLo组成64bit,bitvCommit32bit,如下图:
最终sbh示意图,用于管理1M内存,使内存申请更快,减少碎片: