能力值:
( LV4,RANK:50 )
|
-
-
2 楼
msdn~~~~~
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
GlobalAlloc和LocalAlloc是一样的,现在已经没有Global和Local之分了,它们都是标准内存管理函数。
HeapAlloc属于堆管理函数,标准内存管理函数的分配是在默认堆中分配,而这个是在私有堆分配。
VirtualAlloc属于虚拟内存管理函数,用于分配虚拟地址空间。
Windows MM实在太烦人了……其实我也不是很懂。。。希望没说错什么,等大牛指点。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
问区别的话如楼上所说,用的时候一般情况下用virtual系列比较好,速度比较快。
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
LocalAlloc函数用来分配局部内存。
首先说下局部堆,局部堆是应用程序独享的自由内存,注意是应用程序独享的,所以只能是应用程序来访问,这个局部堆是在应用程序的数据段中建立的。而局部内存对象就是在此局部堆中分配的,由于在数据段,用户可分配的局部内存对象最大不能超过64K。
GlobalAlloc函数用来分配全局内存。
全局堆包括所有的系统内存,全局内存对象在全局堆中分配。应用程序可以在全局堆中进行大型内存分配。由于其在全局堆中分配,所以可以被拥有该内存句柄的多个进程所访问。这点区别于LocalAlloc函数分配的内存对象。再有区别就是有各自对应的加锁和释放函数。
当然要注意了在win32中,每个进程都只拥有一个私有堆,应用程序也不可能访问系统内存,所以在win32中全局堆和局部堆都指向这个私有堆。还要补充的就是应用程序分配的内存都是可以移动的。
下来再说HeapAlloc函数,在进程私有的内存里,又可分两种分配情况,一种基于栈式另一种基于堆式。HeapAlloc函数就是从堆上分配一块内存,并且分配的内存是不可移动的,这样的话如果没有连续的分配空间,就会产生分配失败。为了区别于LocalAlloc在罗嗦几句,HeapAlloc是在分离的堆中分配,也就是说要调用HeapAlloc函数就要先用HeapCreate建立大块的分离堆,在此空间中分配内存,用完后可以一次性释放此分离堆。
对于VirtualAlloc函数是在调用进程的虚地址空间,显然此函数是虚拟内存管理函数,是以页面为单位,当然这个大小与操作系统的设置有关。相对来说这个会比较理解和区分一些。
至于这四个函数的具体参数的用法就不再罗嗦了。。可能有些语无伦次,由于时间原因希望楼主不要太介意,若有没说明白的地方可以跟帖,大家共同探讨。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
了解了解
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
|
能力值:
( LV3,RANK:20 )
|
-
-
8 楼
楼上指出的对
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
5l说的很精辟,学习了
|
|
|