C 内存管理初步了解
1 首先变量了解几个概念
静态变量:用 static 修饰的变量
局部变量: 存储在栈区;作用域是函数块内;生存期是直到函数块结束
全局变量:存储在静态区;作用域是从定义到本源程序结束,生存期是运行期间
静态全局变量:存储在静态区;作用域是函数块内;生存期是运行期间
静态局部变量:存储在静态区;作用域是从定义到工程源程序结束;生存期是运行期间
2 内存的分区:一般为5大分区,栈区,堆区,静态区,常量区,代码区(内存地址从高到底)
栈区:
*函数参数以及局部变量存储的区域
*栈区的存储空间由高向低分配,由低向高存储
*栈区的内存由系统负责分配和回收,开发者没有权限,定义局部变量时由系统分配空间,局部变量被销毁时,由系统回收存储空间,但是存储空间的数值并没有被清空;
*栈的特点:先进后出,后进先出。由栈底开始分配内存,栈顶是最后分配内存的位置
*栈区会存在安全问题,在函数中返回栈内存是不安全的
*栈区的空间是有限的(7M-8M之间),之所以系统运行不崩溃的原因是:栈区空间在频繁的开辟和释放
堆区:
*由开发者自主管理的区域
*由开发者手动开辟内存,手动释放内存
*忘记回收会造成内存泄露,从而导致崩溃
*程序运行结束后会自动回收堆区内存,但是如果不及时回收堆区内存,程序运行期间很有可能是因为内存泄露导致内存被全部占用,程序无法运行。
静态区:也称全局区、数据区
*全局变量和静态变量存储的区域
*当全局变量和局部变量同时出现在同一区域时,全局变量被暂时屏蔽。
*静态区的存储空间由系统回收和分配
*程序运行结束后,静态区的存储空间被回收,静态区变量的生命周期和程序一样长,静态变量的空间只有程序退出才释放
*静态变量只能初始化一次(在编译时初始化),在程序运行期间可以修改值
*静态变量如果没有设置初始值,默认值为0
*静态区分为两部分:一部分存储赋初值的全局变量和静态变量,一部分存储没有赋初值的
常量区:
*常量存储常量区
*常量区内存空间由系统分配和回收
*程序运行结束后,常量区的存储空间被回收
*常量区的数据只能被读取,不能被修改(强行修改会导致程序崩溃)
代码区:
*所有语句编译的CPU指令存储的区域(函数体的二进制代码)
*由系统回收和开辟
*只能读取,不能修改
*在程序运行结束后,才会自动回收
C 内存管理初步了解的更多相关文章
- Windows程序设计学习笔记(一)Windows内存管理初步
学习Windows程序设计也有一些时间了,为了记录自己的学习成果,以便以后查看,我希望自己能够坚持写下一系列的学习心得,对自己学习的内容进行总结,同时与大家交流.因为刚学习所以可能有的地方写不不正确, ...
- 初步swift语言学习笔记6(ARC-自己主动引用计数,内存管理)
笔者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/31824179 转载请注明出处 假设认为文章对你有所帮助.请通过留言 ...
- Android 内存管理 &Memory Leak & OOM 分析
转载博客:http://blog.csdn.net/vshuang/article/details/39647167 1.Android 进程管理&内存 Android主要应用在嵌入式设备当中 ...
- [转载]Java应用程序中的内存泄漏及内存管理
近期发现测试的项目中有JAVA内存泄露的现象.虽然JAVA有垃圾回收的机制,但是如果不及时释放引用就会发生内存泄露现象.在实际工作中我们使用Jprofiler调用java自带的 jmap来做检测还是很 ...
- Linux内核之内存管理完全剖析
linux虚拟内存管理功能 ? 大地址空间:? 进程保护:? 内存映射:? 公平的物理内存分配:? 共享虚拟内存.实现结构剖析 (1)内存映射模块(mmap):负责把磁盘文件的逻辑地址映射到虚拟地 ...
- 12.Object-C--浅谈OC的内存管理机制
昨天学习了OC的内存管理机制,今天想总结一下,所以接下来我要在这里bibi一下:OC的内存管理. 首先我要说的是,内存管理的作用范围. 内存管理的作用范围: 任何继承了NSObject的对象,对其他基 ...
- 垃圾回收GC:.Net自己主动内存管理 上(一)内存分配
垃圾回收GC:.Net自己主动内存管理 上(一)内存分配 垃圾回收GC:.Net自己主动内存管理 上(一)内存分配 垃圾回收GC:.Net自己主动内存管理 上(二)内存算法 垃圾回收GC:.Net自己 ...
- C# 内存管理优化畅想----前言
C#语法简洁.优雅,类库丰富,是我最喜爱的计算机语言,没有“之一”.但是,经过深入学习后发现,C#的内存管理,也就是通常所说的垃圾回收(GC)机制,虽然跟其他支持GC的语言相比,已经很优秀了,但与手动 ...
- Cocos2d-x内存管理解说在ios开发中
使用过 Cocos2d-x 都知道,其中有一套自己实现的内存管理机制,不同于一般 C++ 的编写常规,而在使用前,了解其原理是有必要的,网上已经有很多对内部实现详细解说的文章.而对于使用者而言,并不需 ...
随机推荐
- Sprint(第一天11.14)
Sprint1第一阶段 1.类名:软件工程-第一阶段 2.时间:11.14-11.23 3.选题内容:点餐系统 4.团队博客地址:http://www.cnblogs.com/iamCarson/ 团 ...
- Jmockit使用
引用单元测试中mock的使用及mock神器jmockit实践中的java单元测试中各种Mock框架对比,就能明白JMockit有多么强大: JMockit是基于JavaSE5中的java.lang.i ...
- 深入浅出设计模式——单例模式(Singleton Pattern)
模式动机对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务:一个系统只能有一个窗口管理器或文件系统:一个系统只能有一个计时工具或ID(序号) ...
- IE6/7常用的hack
hack基础: IE6: _selector{property:value;} selector{property:value;property:value !important;} //IE6 不支 ...
- CSS和Js样式属性的对照关系
注意:1.在使用js时,如newTD.style.paddingLeft="200";(错误),正确生效的写法是newTD.style.paddingLeft="200p ...
- 动态内存分配导致Javascript性能的问题
内存分配对性能的影响是很大的,分配内存本身需要时间,垃圾回收器回收内存也需要时间,所以应该尽量避免在堆里分配内存.不过直到最近优化HoLa cantk时,我才深刻的体会到内存分配对性能的影响,其中有一 ...
- 常用git命令及问题解决方法
使用git不久,在这里记录使用git的命令. 1.将本地项目上传git git端 1.[start a project]新建一个项目 example 客户端 1.git init 初始化本地git仓库 ...
- 自定义N维空间数组
class Space : IEnumerable<Space> { public object Filler { get { return filler ?? (filler = Top ...
- ddl dml dcl
DCL数据控制语言 创建临时表空间 create temporary tablespace user_temp tempfile 'E:/oracle/product/10.1.0/oradata/o ...
- 转AjaxControlToolkit的安装与使用详解
AjaxControlToolkit的安装与使用详解 AjaxControlToolkit下载http://ajax.asp.net/downloads/default.aspx?tabid=47ht ...