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

    1 首先变量了解几个概念

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

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

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

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

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

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

      栈区:

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

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

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

     
       
       

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

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

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

      堆区:

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

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

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

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

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

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

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

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

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

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

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

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

      常量区:

        *常量存储常量区

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

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

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

      代码区:

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

        *由系统回收和开辟

        *只能读取,不能修改

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

  • 相关阅读:
    CentOS7 配置163 yum源(详细步骤)
    从构建分布式秒杀系统聊聊分布式锁
    互联网架构“高并发”
    互联网架构“高可用”
    FineCMS
    layUI表单事件监听-事件监听机制简化处理
    界面优雅的UI框架layUI
    如果OCX使用onmousedown和onmouseup来决定指令发送和指令停止会不会有问题?
    CSS字体库font-face用法及跨域问题
    RequireJS被外部调用
  • 原文地址:https://www.cnblogs.com/chenbowen/p/6032750.html
Copyright © 2011-2022 走看看