首页
社区
课程
招聘
关于API的一点小问题
2010-3-24 20:07 3574

关于API的一点小问题

2010-3-24 20:07
3574
请问下面的函数的异同点是什么,各应当用于什么情况:
GlobalAlloc
LocalAlloc
HeapAlloc
VirtualAlloc

Good Luck ~

[培训]《安卓高级研修班(网课)》月薪三万计划

收藏
点赞0
打赏
分享
最新回复 (8)
雪    币: 2105
活跃值: (349)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
exile 1 2010-3-24 20:24
2
0
msdn~~~~~
雪    币: 401
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiilin 2010-3-24 21:22
3
0
GlobalAlloc和LocalAlloc是一样的,现在已经没有Global和Local之分了,它们都是标准内存管理函数。
HeapAlloc属于堆管理函数,标准内存管理函数的分配是在默认堆中分配,而这个是在私有堆分配。
VirtualAlloc属于虚拟内存管理函数,用于分配虚拟地址空间。

Windows MM实在太烦人了……其实我也不是很懂。。。希望没说错什么,等大牛指点。
雪    币: 55
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
AmaranthF 2010-3-24 23:42
4
0
问区别的话如楼上所说,用的时候一般情况下用virtual系列比较好,速度比较快。
雪    币: 63
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
潜行修身 2010-3-25 01:09
5
0
LocalAlloc函数用来分配局部内存。
首先说下局部堆,局部堆是应用程序独享的自由内存,注意是应用程序独享的,所以只能是应用程序来访问,这个局部堆是在应用程序的数据段中建立的。而局部内存对象就是在此局部堆中分配的,由于在数据段,用户可分配的局部内存对象最大不能超过64K。
GlobalAlloc函数用来分配全局内存。
全局堆包括所有的系统内存,全局内存对象在全局堆中分配。应用程序可以在全局堆中进行大型内存分配。由于其在全局堆中分配,所以可以被拥有该内存句柄的多个进程所访问。这点区别于LocalAlloc函数分配的内存对象。再有区别就是有各自对应的加锁和释放函数。
当然要注意了在win32中,每个进程都只拥有一个私有堆,应用程序也不可能访问系统内存,所以在win32中全局堆和局部堆都指向这个私有堆。还要补充的就是应用程序分配的内存都是可以移动的。
下来再说HeapAlloc函数,在进程私有的内存里,又可分两种分配情况,一种基于栈式另一种基于堆式。HeapAlloc函数就是从堆上分配一块内存,并且分配的内存是不可移动的,这样的话如果没有连续的分配空间,就会产生分配失败。为了区别于LocalAlloc在罗嗦几句,HeapAlloc是在分离的堆中分配,也就是说要调用HeapAlloc函数就要先用HeapCreate建立大块的分离堆,在此空间中分配内存,用完后可以一次性释放此分离堆。
对于VirtualAlloc函数是在调用进程的虚地址空间,显然此函数是虚拟内存管理函数,是以页面为单位,当然这个大小与操作系统的设置有关。相对来说这个会比较理解和区分一些。
至于这四个函数的具体参数的用法就不再罗嗦了。。可能有些语无伦次,由于时间原因希望楼主不要太介意,若有没说明白的地方可以跟帖,大家共同探讨。
雪    币: 45
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wangxfmail 2010-3-25 08:30
6
0
了解了解
雪    币: 401
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiilin 2010-3-25 09:52
7
0
5L说的很详细,但是第五段的两个“私有堆”我认为应该换成“默认堆”或者“缺省堆”:-)
默认堆是在程序初始化的时候由操作系统来创建的,所有的标准内存管理函数都是从这里申请内存的。而私有堆是默认堆里保留的一块内存,由HeapCreate来创建的。

在Microsoft的网站上有很多讲Memory Management的资料,例如这里:http://www.microsoft.com/whdc/system/kernel/wmm.mspx

顺便说一句,我这里怎么不能解析msdn.microsoft.com这个域名了?别告诉我墙住了。。。
雪    币: 63
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
潜行修身 2010-3-25 10:34
8
0
楼上指出的对
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sunshinme 2010-3-25 11:32
9
0
5l说的很精辟,学习了
游客
登录 | 注册 方可回帖
返回