windows的内存内存管理函比较
来源:互联网 发布:windows cmd常用命令 编辑:程序博客网 时间:2024/06/05 10:06
GlobalAlloc/LocalAlloc:
在16位Windows中是有区别的,因为在16位windows用一个全局堆和局部堆来管理内存,每一个应用程序或dll装入内存时,代码段被装入全局堆,而系统又为每个实例从全局堆中分配了一个64kb的数据段作为该实例的局部堆,用来存放应用程序的堆栈和所有全局或静态变量。而LocalAlloc/GlobalAlloc就是分别用于在局部堆或全局堆中分配内存.由于每个进程的局部堆很小,所以在局部堆中分配内存会受到空间的限制。但这个堆是每个进程私有的,相对而言分配数据较安全,数据访问出错不至于影响到整个系统。而在全局堆中分配的内存是为各个进程共享的,每个进程只要拥有这个内存块的句柄都可以访问这块内存,但是每个全局内存空间需要额外的内存开销,造成分配浪费。而且一旦发生严重错误,可能会影响到整个系统的稳定。不过在Win32中,每个进程都只拥有一个省缺的私有堆,它只能被当前进程访问。应用程序也不可能直接访问系统内存。所以在Win32中全局堆和局部堆都指向进程的省缺堆。用LocalAlloc/GlobalAlloc分配内存没有任何区别。甚至LocalAlloc分配的内存可以被GlobalFree释放掉。所以在Win32下编程,无需注意Local和Global的区别,一般的内存分配都等效于HeapAlloc(GetProcessHeap(),...).
GlobalAlloc/HeapAllock:
GlobalAlloc是标准内存管理函数,标准内存管理函数都是操作进程的默认堆,所以这个函数是从进程的从进程的默认堆中分配内存空间,分配的空间可以是可移动的也可以是不可以移动的。可移动的内存是指windows在需要的时候可以将这个内存移动到另外一个地址 .
HeapAllock是堆管理函数,堆管理函数可以操作非默认堆(当然也可以操作默认堆),创建一个堆是用HeapCreate,这个函数返回一个堆句柄,然后可以用在HeapAllock函数中,即从返回的这个堆中申请内存空间,HeapAllock申请的内存只能是不可以移动的
而new则是c++的标准函数,在windows的vc++编译器中,new在申请内存最终调用的是GlabalAllock,不过new还会调用类的构造函数。
windows的内存管理除了标准内存管理函数和堆管理函数之外,还有更加底层的虚拟内存管理函数,VirtualAllock就是一个虚拟内存管理函数。
- windows的内存内存管理函比较
- Windows的内存管理
- Windows的内存管理
- Windows的内存管理
- 内存管理 - Windows内存管理
- Windows系统的内存管理
- Windows内存管理的方法
- Windows内存管理的方法
- windows下的内存管理
- Windows内存管理的方法
- Windows内存管理的方法
- 四 Windows的内存管理
- Windows内存管理的方式
- 内存管理 比较全
- WINDOWS的内存管理【虚拟内存管理】(一)
- WINDOWS的内存管理【虚拟内存管理】
- Windows CE内存管理
- Windows CE 内存管理
- Struts中Action的种类
- linux启动提速
- sql小结.11.24.2006
- 医学信息领域的一些情况
- ASP.NET 安全认证(一)
- windows的内存内存管理函比较
- ASP.NET 安全认证(二)
- ASP.NET 安全认证(三)
- 正则表达式基础知识
- setwidowlong
- ASP.NET 安全认证(四)
- 用正则表达式编写验证函数
- 常用正则表达式
- Struts中不同的Action和ActionForm组合