c语言中静态区,栈,堆的理解
2024-08-29 15:38:32
对于程序员,一般来说,我们可以简单的理解为内存分为三个部分:静态区,栈,堆。
很多书没有把把堆和栈解释清楚,导致初学者总是分不清楚。
其实堆栈就是栈,而不是堆。
堆的英文是heap;栈的英文是stack,也翻译为堆栈。堆和栈都有自己的特性,这里先不做讨论。
陈正冲老师在此处打了一个比方:一层教学楼,可能有外语教室,允许外语系学生和老师进入;还可能有数学教师,允许数学系学生和老师进入;还可能有校长办公室,允许校长进入。
同样,内存也是这样,内存的三个部分,不是所有的东西都能存进去的。
静态区:保存自动全局变量和static变量(包括static全局和局部变量)。静态区的内容在总个程序的生命周期内都存在,由编译器在编译的时候分配。
栈:保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。其特点是效率高,但空间大小有限。
堆:由malloc系列函数或new操作符分配的内存。其生命周期由free或delete决定。在没有释放之前一直存在,直到程序结束。其特点是使用灵活,空间比较大,但容易出错。
最新文章
- Linux文件权限和访问模式
- 浅谈:深入理解struts2的流程已经spring和struts2的整合
- .添加索引和类型,同时设定edgengram分词和charsplit分词
- Android 组件属性
- Java:集合工具类-Collections
- 【jmeter】HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults
- 构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统
- 解决mac os x 10.9.1 AppStore ‘Use the Purchases page to try again’ 问题
- HDOJ(HDU) 2091 空心三角形
- Ubuntu安装分区设置
- rsyslog VS syslog-ng,日志记录哪家强?
- AOP:代理思想 (没有考虑到Spring)
- chrome不支持embed标签解决方案
- SQLServer之创建辅助XML索引
- 3.HttpSession
- 关键字(6):trigger触发器
- centoos内核升级
- PHP-CPP开发扩展(二)
- 观V8源码中的array.js,解析 Array.prototype.slice为什么能将类数组对象转为真正的数组?
- 使用B::Deparse模块对perl代码反汇编
热门文章
- main函数的正确格式
- iOS 开发一年总结
- EXTJS 4.2 资料 控件textfield中fieldLabel去掉冒号,控件label的长度
- SQL Server 和 Oracle 以及 MySQL 有哪些区别?
- linux 下安装JDK1.7
- Workspace in use or cannot be created, choose a different one.--错误解决办法
- android 图片画画板
- linux 使用kill命令杀死进程的几个办法
- 12 求1+2+...+n
- Web Api 入门