zoukankan      html  css  js  c++  java
  • 内存分配函数分类

    4种用于内存分配的API函数。虚拟VIRTUAL函数用于分配和管理大数量的内存,堆函数HEAP用于小数量内存,全局函数GLOBAL及局部函数LOCAL用于小数量内存分配,这两类函数是为了实现与16位系统兼容而提供的。WIN32 API仍然维护全局以及局部的堆函数,但是它们都是从局部的2GB中分配内存。这些堆对于进程而言都是局部的,不能被其他进程访问。

           当一个程序需要分配一个至少几KB缓存时,使用VIRTUALALLOC函数获得内存块。它以4KB为单位获取内存,分配的内存以4KB来对齐。当程序需要为小对象,数组或者结构分配内存时,调用HEAPALLOC函数更合适。将VIRTUALALLOC函数用于对小数据结构的访问会造成内存资源的浪费。

           每个进程都有一个默认堆,但是为了提高效率和便于管理,程序也可以分配额外的堆。每个堆都有自己的句柄,调用GETPROCESSHEAP函数获得默认堆的句柄。

           进程中的线程可以访问进程中的默认堆,WIN32内存管理对堆的访问是串行的。当一个线程执行一个堆函数时,其他线程对内存的请求就会被挂起直到函数结束。这样会给程序带来很小的延迟。如果一个线程需要访问一些堆并且不想与其他线程分享这个堆,那么为线程分配私有堆PRIVATE HEAP要比使用默认堆快得多。在线程使用私有堆的情况下,可以在堆分配时选择不对堆进行串行化处理。这样的话,那些需要其他堆空间的其他线程就不会被延迟。如果需要使用方便或者需要代码紧凑就应使用默认堆,如果需要速度则应使用线程私有堆。

           动态链接库在默认情况下不拥有自己的堆,它与调用它的进程共享堆,DLL可以分配自己的私有堆并使用它。

           当程序使用完堆以后一定要释放堆。否则会产生内存泄漏MEMORY LEAK。一个规则就是,谁分配谁释放。

  • 相关阅读:
    发现对各类项目有用的不同JavaScript的Web UI
    PowerDesigner 15.1 安装步骤详细图解及破解
    数据库设计工具PowerDesigner基础普及
    Vistual Studio 2010(VS2010)安装 MVC3.0具体方法
    pb的网络资源【转】
    powerbuider11 C/S 转换为B/S
    转:将可执行文件注册成系统windows服务
    WCF绑定类型选择(转)
    (转)找增强方法总结
    ALV简单模板1
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940700.html
Copyright © 2011-2022 走看看