windows内存分配方法对比

近时间,做了一个内存管理的报告,顺便整理了一下内存方面的知识。下面就几种常用的内存分配方法做一个对比。

 

 

 

内存分配方法

适用场合

优缺点

虚分配

最适合用来管理大型对象或者结构数组。比如说,电子表格程序,有很多单元格,但是也许大多数的单元格是没有数据的,用不着分配空间。一般来说,如果需要内存大于1M,用虚拟内存比较好。

优点:需要的时候才真正分配内存,同时具有数组的快速和链表的小空间的优点

内存映射文件

最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行多个进程之间共享数据

优点:不必再对文件执行I/O操作,不必再为文件申请并分配缓存,;多个进程之间共享数据

内存堆栈

最适合用来管理大量的小对象

优点:可以不考虑分配粒度和页面边界之类的问题。

缺点:分配和释放内存块的速度比其他机制要慢,并且无法直接控制物理存储器的提交和回收。

函数

内存分配位置

备注

VirtualAlloc

虚拟内存

VirtualAlloc一次分配1PAGE以上的RAM. 每次分配都是PAGE的整数倍.

GlobalAlloc

(Windows 16)

从全局堆上分配

代码段被装入全局 堆,GlobalLock同时使用

LocalAlloc

(Windows 16)

从局部堆中分配

系统为每个实例从全局堆中分配了一个64kb的数据段作为该实例的局部堆,用来存放应用程序的堆栈和所有全局或静态变量。

HeapAlloc

省缺的私有堆,该分配方法是从一指定地址开始分配

HeapALloc是从堆上分配一块内存,且分配的内存是不可移动的;KERNEL32帮你完成分配动作, 并且尽量在减少用于跟踪空闲区域和已占用区域消耗的数据结构

malloc

一般malloc的实现并不是从系统的堆中分配的,而是从编译器连接的运行库自己管理的堆中

Win32平台上的开发工具的编译 结果中,通常是用HeapCreate创建一个堆,用HeapAllocHeapRealloc维护堆的空间增长,在最后用HeapDestroy删除堆。而在用malloc分配、用free释放时则由运行库的代码负责从这个堆中分配空间和向这个堆中归还空间,并维护这个堆中的数据结构。

new

一般编译器中的new都是用malloc来分配内存的

newC++的构造函数和异常机制有关。

new可以认为是malloc加构造函数的执行

第一次使用,不知道怎么创建表格,格式是一塌糊涂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值