1、什么是堆?
 堆(heap)是一种内存管理方式。内存管理对操作系统来说是一件非常复杂的事情,因为首先内存容量很大,
 其次就是内存需求在时间和大小块上没有规律(操作系统上运行着几十甚至几百个进程,这些进程可能随时
 都会申请或者是释放内存,并且申请和释放的内存块大小是随意的)。
 堆这种内存管理方式的特点就是自由(随时申请、随时释放、大小块随意)。堆内存是操作系统划归给堆管
 理器(操作系统中的一段代码,属于操作系统的内存管理单元)来管理的,然后向使用者(用户进程)提供
 API(malloc和free)来使用堆内存。
 
 我们什么时候使用堆内存?
 当我们需要的内存容量比较大时,需要反复使用及释放时,很多数据结构(譬如链表)的实现都要使用堆内存。
 
2、堆管理内存的特点(大块内存、手工分配&使用&释放)
 特点一:容量不限(常规使用的需求容量都可以满足)
 特点二:申请及释放都需要手工运行,手工进行的含义就是需要程序员写代码明确进行申请malloc及释放free。
 如果程序员申请内存并使用后未释放,这段内存就丢失了(在堆管理器的记录中,这段内存仍然属于你这个进程,
 但是进程自己又以为这段内存已经不用了,所以进程再次运行的时候,就又会去申请新的内存块,这就叫做吃内存),
    称之为内存泄漏。在C/C++语言中,内存泄漏是最严重的程序bug,这也是别人认为Java/C#等语言比C/C++优秀的地方。
3、C语言操作堆内存的接口(malloc free)
    堆内存释放的时候最简单,直接调用free释放即可。  void free(void *ptr);
 堆内存申请时,有3个可选择的类似功能的函数:malloc ,calloc, realloc
 void *malloc(size_t size);
 void *calloc(size_t nmemb, size_t size);     //nmemb个单元,每个单元size字节
 void *realloc(void *ptr, size_t size);       //改变原来申请的空间的大小的
 
 譬如要申请10个int元素的内存:
 malloc(40);           malloc(10 * sizeof(int));
 calloc(10, 4);        calloc(10, sizeof(int));
 
 数组定义时必须同时给出数组元素个数(数组大小),而且一旦定义在无法更改。
 堆内存在申请时必须给定大小,然后一旦申请完成大小不变,如果要变只能通过realloc接口。
4、堆的优势和劣势(管理大块内存、灵活、容易内存泄漏)
 优势:灵活
 劣势:需要程序员去处理各种细节,所以容易出错,严重依赖于程序员的水平。

最新文章

  1. PHP基础知识之魔术方法
  2. HTML表单提交
  3. Jetty 的工作原理以及与 Tomcat 的比较
  4. 在DDwrt下对Firmware操作的一些技巧
  5. AC自动机 - 关于Fail指针
  6. Swift闭包(Closure)
  7. Linux--根文件系统的挂载过程分析
  8. Codeforces 85D Sum of Medians(线段树)
  9. Thinkphp开启调试模式
  10. 二、urllib进阶
  11. JQuery显示,隐藏和淡入淡出效果
  12. docker实战---初级<1>
  13. shell脚本:Kill掉MySQL中所有sleep的client线程
  14. Go语言专题
  15. TZOJ 1321 Girls and Boys(匈牙利最大独立集)
  16. Entity Framework 同一个上下文中,如何进行对同一个实体进行指定字段更新
  17. 改变 select下拉框 样式
  18. web前端基础补充
  19. JS对字符串编码的几种方式
  20. Oracle中的substr()函数详解案例

热门文章

  1. Python 编写代码 检查是否遵循PEP 8标准
  2. apache启动错误:Could not reliably determine the server's fully qualified domain name
  3. R函数
  4. linux下操作oracle
  5. 11.json
  6. 九十七、SAP中ALV事件之十,通过REUSE_ALV_COMMENTARY_WRITE函数来显示ALV的标题
  7. JAVA - SpringBoot项目引用generator生成 Mybatis文件
  8. HDU 4902 Nice boat 多校4 线段树
  9. 5 ~ express ~ 连接数据库
  10. Day3-T1