1 首先变量了解几个概念

  静态变量:用 static 修饰的变量

  局部变量: 存储在栈区;作用域是函数块内;生存期是直到函数块结束

  全局变量:存储在静态区;作用域是从定义到本源程序结束,生存期是运行期间

  静态全局变量:存储在静态区;作用域是函数块内;生存期是运行期间

  静态局部变量:存储在静态区;作用域是从定义到工程源程序结束;生存期是运行期间

2 内存的分区:一般为5大分区,栈区,堆区,静态区,常量区,代码区(内存地址从高到底)

  栈区:

    *函数参数以及局部变量存储的区域

    *栈区的存储空间由高向低分配,由低向高存储

    *栈区的内存由系统负责分配和回收,开发者没有权限,定义局部变量时由系统分配空间,局部变量被销毁时,由系统回收存储空间,但是存储空间的数值并没有被清空; 

 
   
   

    *栈的特点:先进后出,后进先出。由栈底开始分配内存,栈顶是最后分配内存的位置

    *栈区会存在安全问题,在函数中返回栈内存是不安全的

    *栈区的空间是有限的(7M-8M之间),之所以系统运行不崩溃的原因是:栈区空间在频繁的开辟和释放

  堆区:

    *由开发者自主管理的区域

    *由开发者手动开辟内存,手动释放内存

    *忘记回收会造成内存泄露,从而导致崩溃

    *程序运行结束后会自动回收堆区内存,但是如果不及时回收堆区内存,程序运行期间很有可能是因为内存泄露导致内存被全部占用,程序无法运行。

  静态区:也称全局区、数据区

    *全局变量和静态变量存储的区域

    *当全局变量和局部变量同时出现在同一区域时,全局变量被暂时屏蔽。

    *静态区的存储空间由系统回收和分配    

    *程序运行结束后,静态区的存储空间被回收,静态区变量的生命周期和程序一样长,静态变量的空间只有程序退出才释放

    *静态变量只能初始化一次(在编译时初始化),在程序运行期间可以修改值

    *静态变量如果没有设置初始值,默认值为0

    *静态区分为两部分:一部分存储赋初值的全局变量和静态变量,一部分存储没有赋初值的

  常量区:

    *常量存储常量区

    *常量区内存空间由系统分配和回收

    *程序运行结束后,常量区的存储空间被回收

    *常量区的数据只能被读取,不能被修改(强行修改会导致程序崩溃)

  代码区:

    *所有语句编译的CPU指令存储的区域(函数体的二进制代码)

    *由系统回收和开辟

    *只能读取,不能修改

    *在程序运行结束后,才会自动回收

C 内存管理初步了解的更多相关文章

  1. Windows程序设计学习笔记(一)Windows内存管理初步

    学习Windows程序设计也有一些时间了,为了记录自己的学习成果,以便以后查看,我希望自己能够坚持写下一系列的学习心得,对自己学习的内容进行总结,同时与大家交流.因为刚学习所以可能有的地方写不不正确, ...

  2. 初步swift语言学习笔记6(ARC-自己主动引用计数,内存管理)

    笔者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/31824179 转载请注明出处 假设认为文章对你有所帮助.请通过留言 ...

  3. Android 内存管理 &Memory Leak & OOM 分析

    转载博客:http://blog.csdn.net/vshuang/article/details/39647167 1.Android 进程管理&内存 Android主要应用在嵌入式设备当中 ...

  4. [转载]Java应用程序中的内存泄漏及内存管理

    近期发现测试的项目中有JAVA内存泄露的现象.虽然JAVA有垃圾回收的机制,但是如果不及时释放引用就会发生内存泄露现象.在实际工作中我们使用Jprofiler调用java自带的 jmap来做检测还是很 ...

  5. Linux内核之内存管理完全剖析

    linux虚拟内存管理功能 ? 大地址空间:? 进程保护:? 内存映射:? 公平的物理内存分配:? 共享虚拟内存.实现结构剖析   (1)内存映射模块(mmap):负责把磁盘文件的逻辑地址映射到虚拟地 ...

  6. 12.Object-C--浅谈OC的内存管理机制

    昨天学习了OC的内存管理机制,今天想总结一下,所以接下来我要在这里bibi一下:OC的内存管理. 首先我要说的是,内存管理的作用范围. 内存管理的作用范围: 任何继承了NSObject的对象,对其他基 ...

  7. 垃圾回收GC:.Net自己主动内存管理 上(一)内存分配

    垃圾回收GC:.Net自己主动内存管理 上(一)内存分配 垃圾回收GC:.Net自己主动内存管理 上(一)内存分配 垃圾回收GC:.Net自己主动内存管理 上(二)内存算法 垃圾回收GC:.Net自己 ...

  8. C# 内存管理优化畅想----前言

    C#语法简洁.优雅,类库丰富,是我最喜爱的计算机语言,没有“之一”.但是,经过深入学习后发现,C#的内存管理,也就是通常所说的垃圾回收(GC)机制,虽然跟其他支持GC的语言相比,已经很优秀了,但与手动 ...

  9. Cocos2d-x内存管理解说在ios开发中

    使用过 Cocos2d-x 都知道,其中有一套自己实现的内存管理机制,不同于一般 C++ 的编写常规,而在使用前,了解其原理是有必要的,网上已经有很多对内部实现详细解说的文章.而对于使用者而言,并不需 ...

随机推荐

  1. HTTP中的摘要认证机制

    引子: 指定和服务器端交互的HTTP方法,URL地址,即其他请求信息: Method:表示http请求方法,一般使用"GET","POST". url:表示请求 ...

  2. 百度地图 判断marker是否在多边形内

    昨天画了圆形,判marker是否存在圆形内.今天来画多边形,判断marker在多边形内. 需要引入一个js      <script type="text/javascript&quo ...

  3. git drupal eclipse

    eclispe如何打补丁https://www.drupal.org/patch/apply打patch,初级详细教程https://www.drupal.org/node/620014

  4. c.BIO连接器与NIO连接器的对比

    前面两节,我们分别看了BIO和NIO的两种模式Tomcat的实现方式. BIO的方式,就是传统的一线程,一请求的模式,也就是说,当同时又1000个请求过来,如果Tomcat设置了最大Accept线程数 ...

  5. python核心编程第六章练习6-11

    6-11.转换.(a)创建一个从整型到IP地址的转换,如下格式:www.xxx.yyy.zzz.(b)更新你的程序,使之可以逆转换.[答案](a)代码如下: Input_number = abs(in ...

  6. Modify textures at runtime

    动态修改Texture Modify textures at runtime?http://answers.unity3d.com/questions/7906/modify-textures-at- ...

  7. progresql - 常用的管理命令

    1.查看当前数据库实例的版本 Select version(); 2.查看数据库的启动时间 Select pg_postmaster_start_time(); 3.查看最后load配置文件的时间 s ...

  8. “不支持一个STA线程上针对多个句柄的WaitAll。”的解决方案

    一.异常提示 不支持一个 STA 线程上针对多个句柄的 WaitAll. 出错界面如下图: 二.解决方法 先直接上解决方案吧.其实解决方法很简单如下面的代码直接把main函数的[STAThread]属 ...

  9. 安装Pod时提示ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/pod

    环境:OSX EI 10.11.1 昨天切换gem源后,招待pod安装没有任何问题,也可以正常用$ gem sources --add https://ruby.taobao.org/ --remov ...

  10. Java:Map

    接口Map<K,V>,K – 映射所维护的键的类型:V – 映射值的类型. public interface Map<K,V>,将键映射到值的对象.一个映射不能包括重复的键:每 ...