对于程序员,一般来说,我们可以简单的理解为内存分为三个部分:静态区,栈,堆。

很多书没有把把堆和栈解释清楚,导致初学者总是分不清楚。

其实堆栈就是栈,而不是堆。

堆的英文是heap;栈的英文是stack,也翻译为堆栈。堆和栈都有自己的特性,这里先不做讨论。

陈正冲老师在此处打了一个比方:一层教学楼,可能有外语教室,允许外语系学生和老师进入;还可能有数学教师,允许数学系学生和老师进入;还可能有校长办公室,允许校长进入。

同样,内存也是这样,内存的三个部分,不是所有的东西都能存进去的。

静态区:保存自动全局变量和static变量(包括static全局和局部变量)。静态区的内容在总个程序的生命周期内都存在,由编译器在编译的时候分配。

栈:保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。其特点是效率高,但空间大小有限。

堆:由malloc系列函数或new操作符分配的内存。其生命周期由free或delete决定。在没有释放之前一直存在,直到程序结束。其特点是使用灵活,空间比较大,但容易出错。

最新文章

  1. Linux文件权限和访问模式
  2. 浅谈:深入理解struts2的流程已经spring和struts2的整合
  3. .添加索引和类型,同时设定edgengram分词和charsplit分词
  4. Android 组件属性
  5. Java:集合工具类-Collections
  6. 【jmeter】HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults
  7. 构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统
  8. 解决mac os x 10.9.1 AppStore ‘Use the Purchases page to try again’ 问题
  9. HDOJ(HDU) 2091 空心三角形
  10. Ubuntu安装分区设置
  11. rsyslog VS syslog-ng,日志记录哪家强?
  12. AOP:代理思想 (没有考虑到Spring)
  13. chrome不支持embed标签解决方案
  14. SQLServer之创建辅助XML索引
  15. 3.HttpSession
  16. 关键字(6):trigger触发器
  17. centoos内核升级
  18. PHP-CPP开发扩展(二)
  19. 观V8源码中的array.js,解析 Array.prototype.slice为什么能将类数组对象转为真正的数组?
  20. 使用B::Deparse模块对perl代码反汇编

热门文章

  1. main函数的正确格式
  2. iOS 开发一年总结
  3. EXTJS 4.2 资料 控件textfield中fieldLabel去掉冒号,控件label的长度
  4. SQL Server 和 Oracle 以及 MySQL 有哪些区别?
  5. linux 下安装JDK1.7
  6. Workspace in use or cannot be created, choose a different one.--错误解决办法
  7. android 图片画画板
  8. linux 使用kill命令杀死进程的几个办法
  9. 12 求1+2+...+n
  10. Web Api 入门