Windows内存管理

虚拟地址空间

物理存储器: 物理内存 + 页文件

进程拥有堆,堆默认是1M,但是可以根据需要,通过堆管理器调用VirtualAlloc来分配。

线程拥有栈,栈默认是1M,从高到第地分配。

new 和 malloc是在堆空间中分配空间,但是他们会有一个加锁的过程,保证堆只被一个对象所拥有。

在windows环境下,其分配粒度大小均为64k。那么,我们可以把整个虚拟内存空间看作是由一个个以64k为边界的64k大小的内存页面组成。如果用VirtualAlloc来申请内存,不管申请多大,内存管理器都会把整张整张的页面给你,即使你只申请一个字节的内存,内存管理器也会把一个64k大小的未用的页面返回给你,这样势必会造成内存资源的浪费。而调用new来申请堆中的空间,就不会出现这种情况。堆就是一个内存池,微软已经对堆管理器分配堆内存的策略做了高度的优化。当我们调用new或malloc时,堆管理器会从堆中找出一块恰当的内存返回给我们。

 

转载于:https://www.cnblogs.com/wang-can/p/3355856.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值