sbrk 到底 怎么用? 今天终于知道了

        地址小小 0x930000

        ...

        地址小  0x9483000

        addr1

        addr2

        addr3

        ...

        addrn

        地址大  0x9483020

main()

{

第一次变更,扩大0字节:

 int *p1 = sbrk(0);   

//返回值是本次扩大前堆的界限addr。  这里实验结果 p1 = 0x9483000。 

//本次扩大堆0字节后,堆界限不变等于p1的值(实验看堆界限随着扩展扩大向大地址变)。 



第二次变更,扩大4字节:

int *p2 = sbrk(4);

//扩大堆4字节,实验结果p2 = 0x9483000。  返回值是上次变更堆大小后堆界限地址。

//本次扩大4字节后,堆界限增加4,即0x9483004。



第三次变更,扩大4字节:

int *p3 = sbrk(4);

//继续扩大4B,实验结果p3 = 0x9483004。

//本次扩大4字节后,堆界限增加4,即0x9483008。



第四步,回收内存,缩小8字节:

sbrk(-8);

//之后堆界限(大地址)恢复到程序第一步sbrk(0)之前,即0x9483000



//返回值定义:返回上次,即第四步变更后堆的界限(大地址),即上一行的0x9483000

int *p4 = sbrk(0);

//本次变更0字节,堆界限不变

}

诸位觉得对此篇文章哪些地方有疑惑,欢迎提出,促进我改正完善。谢谢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值