• [c语言】简单的static修饰


    用static语句用来修饰 局部变量全局变量 和 函数

    1、static修饰局部变量

    static修饰 局部变量,便将该变量定义为 静态局部变量,并将其储存在 静态区

     (1)栈区、堆区 和 静态区

    • 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;
    • 全局数据区可分为三部分:栈区、堆区、静态区
    • 栈区:存放函数的参数值、局部变量等,由编译器自动分配和释放,通常在函数执行完后就释放了,其操作方式类似于数据结构中的栈。栈内存分配运算内置于CPU的指令集,效率很高,但是分配的内存量有限。
    • 堆区:就是通过new、malloc、realloc分配的内存块,编译器不会负责它们的释放工作,需要用程序区释放。分配方式类似于数据结构中的链表。“内存泄漏 ”通常说的就是堆区。
    • 静态区:全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后,由系统释放。

    (2)区别

    • 栈区内存由系统自动分配,函数结束时释放。
    • 栈区是一块连续的内存的区域,速度较快,效率较高。
    • 栈区存放的是 局部变量,基础数据类型的值以及基础数据的引用。 

    • 堆区内存由程序员自己申请,并指明大小。

    • 堆区是是不连续的内存区域,动态分配空间,存储空间大一些,可以说是动态内存管理。

    • 指针本身存在调用栈中,而指针指的数据在堆中。


    • 在静态区中全局变量和静态变量被分配到这一块内存中。

    • 在静态区的变量出其作用域并不会被销毁,而是整个程序结束后才被削会。

    (3) 

     

     

    • 这里是整形变量b未被static 修饰的结果:1 1 1 1 1 1 1 1 1 1 1。
    • 每一次随函数的开始而开始,一旦函数结束,那么,变量b 中的数据也会被销毁。
    • 而一旦用static修饰变量b,那么,变量b 中的数据就不会被销毁,会被保留在静态区中。

     

    •  而其保留的值会被输入while语句中去执行,其结果:1 2 3 4 5 6 7 8 9 10 11 

     

    2、本质上是static开辟了一块静态区储存区域,将变量转移至静态区,扩大其作用域 

    相当于一个全局变量(具有了全局变量的属性)

    static影响了变量的生命周期。 

  • 相关阅读:
    2022.07.20
    Python之字符串判断
    SpringSecurity - 自定义用户认证
    Observability:使用 Elastic Agent 来收集定制的 TCP 日志
    vue3学习(七)--- Teleport传送组件
    SpringBoot电商项目实战Day6 堆排序
    数据分析之Tebleau可视化:树状图、日历图、气泡图
    ubuntu20.04 vins-fusion 运行记录
    零代码编程:用ChatGPT多线程批量将PDF文档转换为word格式
    WPS文件找回怎么做?文件恢复,4个方法!
  • 原文地址:https://blog.csdn.net/nvty_hai/article/details/132641076