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. select框内容的编辑、修改、添加、删除操作

    // 添加 function col_add() { var selObj = $("#mySelect"); var value="value"; var t ...

  2. 一个java的DES加密解密类转换成C#

    一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //import java.util.regex.P ...

  3. CentOS----使用yum命令出现“could not retrieve mirrorlist http://mirrorlist.centos.org ***” - ybq155”

    无聊安装了个mini版的32位的CentOS 6.5,进来想安装个东西,yum install emacs 提示什么 Loaded plugins: fastestmirror, refresh-pa ...

  4. [hdu1394]Minimum Inversion Number(树状数组)

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

  5. 关于 RxJava 技术介绍

    Awesome-RxJava RxJava resources Blog 给 Android 开发者的 RxJava 详解 -强烈推荐 扔物线的文章 讲解非常详细 NotRxJava懒人专用指南 -这 ...

  6. JQuery的概述

    一.什么是 jQuery 1.jQuery是一个JavaScript库,jQuery 极大地简化了 JavaScript 编程.它通过封装原生的JavaScript函数得到一整套定义好的方法. 2.它 ...

  7. solr 6.1 服务端 tomcat 搭建及调用

    一.下载 apache solr6.1.0 最新版本zip,解压缩生成一个solr6.1.0文件夹 二.安装 1.在d:/projects下新建一个solr 2.把solr6.1.0/server/s ...

  8. android mvvm

    android studio 需要gradle 1.5.0以上才支持 dependencies { classpath 'com.android.tools.build:gradle:1.5.0'} ...

  9. C#导出csv文件 支持中文的解决方案

    #region 导出CSV下载 string exportFileName = "Export" + DateTime.Now.ToString("yyyyMMddHHm ...

  10. windows添加虚拟网卡