• 内存管理--内存布局


    内存管理——内存布局
    代码区、常量区、静态区(全局区)、堆区、栈区
    const 关键字详解
    底层内存分布
    在这里插入图片描述
    代码区:存放程序的代码,即CPU执行的机器指令,并且是只读的;
    常量区:存放常量(程序在运行时不能被改变的量),例如:10,字符串常量:“abcd”;数组名;
    静态区(全局区):静态变量和全局变量的存储区域是一起的;一旦静态区的内存被分配,静态区的内存直到程序结束之后才会被释放
    堆区:由程序员调用**malloc()**函数来主动申请的,需使用free()函数来释放内存,若申请的堆区内存,之后忘记释放,就会造成内存泄漏问题;
    栈区:存放函数的局部变量、形参和函数返回值,栈区之中的数据作用范围过了之后,系统就会自动回收内存。

    在栈上创建数组时,不能使用含有变量的表达式,如:int a[x+2]是错误的。
    在栈上创建的数组,编译时就需要在栈上分配内存,可是有了变量以后,编译器就无法知道分配多大的内存了,编译器就会报错。
    在堆上可以动态创建数组,因为在堆上创建数组时,编译器不会做编译时分配内存,而是在程序运行时分配内存,我们可以知道,程序运行时变量的值就会明确还多少,故动态创建数组时就可以出现变量。

    static关键字
    (1)用于修饰局部变量,全局变量和函数;
    (2)存放在静态区;
    (3)定义时没有初始化时,会将其初始化为0;
    (4)修饰局部变量时,函数返回时,值不变
    (5)修饰全局变量和函数时,只在当前文件可见,降低程序模块之间的耦合性。

    const关键字
    (1)被修饰的变量不可被修改;
    (2)存放在常量区;
    (3)const修饰的普通变量:定义时就是赋初值,后面就不能被修改了;
    (4)const修饰的全局变量存放在常量区,也不可修改。
    (5)const修饰的变量并不会存放在全局(静态)区,而是取决于他定义的地方,局部定义就是在栈区,全局定义就是在静态区。

    static和const区别
    static修饰的变量称为静态变量,存储在全局(静态)区,生命周期程序编译到运行结束;
    const修饰的变量并不会存放在全局(静态)区,而是取决于它定义的地方,局部定义的就存在栈区,全局定义的就存放在静态区。
    const修饰的变量不能被修改,为什么不放在只读数据区呢,是因为C语言中使用const修饰了一个变量,该变量不能直接修改,但是可以通过拿到这个变量的地址来修改这个变量。
    在这里插入图片描述
    但是如果修饰的字符串常量,那就无论如何也修改不了的。

  • 相关阅读:
    驱动初识==Linux驱动开发1
    微信小程序之会议OA首页数据交互,会议状态,会议人数转换,会议室交互,WXS的使用
    被弃用的 Docker 未死:带着 1.05 亿美元融资“回归”,估值高达 21 亿
    分布式定时任务
    游戏心理学Day26
    DStream转换介绍_大数据培训
    帆软FineReport决策报表之页面布局
    国开教育学形考任务2试题1试题及答案
    10个最流行的向量数据库【AI】
    二十四、MySQL事务操作演示
  • 原文地址:https://blog.csdn.net/weixin_42097108/article/details/125536556