zoukankan      html  css  js  c++  java
  • C 内存管理初步了解

    1 首先变量了解几个概念

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

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

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

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

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

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

      栈区:

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

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

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

     
       
       

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

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

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

      堆区:

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

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

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

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

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

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

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

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

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

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

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

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

      常量区:

        *常量存储常量区

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

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

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

      代码区:

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

        *由系统回收和开辟

        *只能读取,不能修改

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

  • 相关阅读:
    借了个屏幕来用
    生命开始的地方
    看了STLPort的安装方法,晕了
    程序员必备的10大健康装备!
    《代码整洁之道》读书笔记
    Mockito使用
    学习Emacs的理由
    shell 脚本编程的10 个最佳实践
    MongoDB入门
    用Orgmode实践《奇特的一生》
  • 原文地址:https://www.cnblogs.com/chenbowen/p/6032750.html
Copyright © 2011-2022 走看看