c++内存管理09-winmain/main之前你所不知道的事01

winmain/main之前你所不知道的事01

其实main开始之前执行了很多操作如下图○1-○9:
先看看下面的代码:
在这里插入图片描述
代码解读:
后面三行是操作系统的内核,然后调用mainCRTStarup,这是一个c标准库函数,绿色框框里面的就是它做的事情。
1):在这里先讲解_heap_alloc_base(…),看右边小图
如果分配的大小小于等于_sbh_threshold(它是一个常量,大小为1016);
如果大于1016,就用HeapAlloc(…)分配,由此可看出,内存管理主要针对小区块的分配。
2):_heap_init(…)
Windows其实本身维护了海量的内存,用户可以和Windows要求让其分配一块特殊的内存,以后用户分配内存就从这个特殊的内存块取。
如下图:其中_crtheap就是那个特殊的内存,可以把它当作一个指针。
在这里插入图片描述
第一句if(….)如果分配成功就得到了特殊内存_crtheap,紧接着执行__sbh_heap_init(),定义如下
在这里插入图片描述
这个函数主要是为了获得__sbh_pHeaderList,注意HeapAlloc(…),里面有个_creheap,这个就是我们的特殊内存,我们从这个里面获取16个HEADER大小的内存。
在这里插入图片描述
可知道BITVEC是一个32位的整数。其中bitEntryHi和bitEntryLo组成了一个64位的组合,后一个bitvCommit就是最上面的一个32位,其余两个参数就是两个指针。至于后面两个指针所指的内容后面再讲解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发如雪-ty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值