• 全局变量,静态变量,局部变量


    全局变量:变量的存储类型(变量的生存期):是指为变量分配使用内存空间的方式,也称存储方式。

    1. 静态存储:外部变量(所有函数之外的定义的变量为外部变量,属全局变量,使用静态存储方式保存,保存在全局区,即静态区)和静态变量
    2. 动态存储:自动变量(属于局部变量)和寄存器变量(保存在CPU的寄存器,只有局部变量才能定义为寄存器变量,将变量定义为寄存器变量后就不能对期取址,因为寄存器是没有内存地址的)

    自动变量(auto)----生存期:定义该变量的函数被调用时才给它分配存储单元,开始它的生存期,函数调用结束,释放存储单元,结束生存期;作用域:定义它的函数或复合语句内。注,系统不会为其进行默认的初使化赋值值。

    寄存器变量(register)----寄存器变量是局部变量,使用动态存储方式。

    外部变量----也称全局变量。具有全局作用域,只需在一个源文件中定义,就可以作用于所有的源文件,当然,其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量。

        一个C程序由main.c和test.c两个文件组成

        

    main.c代码如下
    int i,j;
    int main()
    {
    ...
    return 0;
    }

    test.c代码如下
    extern int i,j;
    int myfunction (int m,int n)
    {
    ...
    return 0;
    }

    静态变量----静态局部变量:在函数内定义,但当函数退出后,静态局部变量始终还存在,其占用的内存单元不会被人释放,只有当程序结束时,才会随全局变量一起释放。生存期:整个源程序(从变量定义开始到程序结束)。作用域:定义该变量的函数内。退出该函数后,尽管该变量还存在,但不能使用它。如果再次调用定义它的函数时,它又可继续使用,而且保存了前次被人调用后留下的值;静态全局变量:只能在其所在文件模块中的函数中使用。其他文件模块中的函数将不能访问。

    内存区域的划分:

    1. 栈区:由编译器自动分配和释放的内存区域,用于存放函数的参数值,局部变量的值等。随着函数的调用和返回,栈区的数据将动态变化。
    2. 堆区:程序员向系统申请或释放。若程序员在程序结束时还没有释放,则可能由操作系统回收。malloc.
    3. 全局区:用来保存全局变量和静态变量。在进入程序时分配区域,程序结束后由系统释放。
    4. 文字常量区:用于保存常量字符串的内存区域,程序结束后,由系统释放。
    5. 程序代码区:用于保存函数体的二进制代码。

    变量分类表

     

     

     

    在计算机中存储的位置

     

    作用域

     

    生存期

     

    引用情况

    本函数内

    函数外

     

    本函数内

     

    函数外

     

    本文件内

     

    文件外

     

    自动(局部)变量

     

    内存动态存储区

    (即栈区)

     

    有效

     

    无效

     

    有效

     

    无效

     

    无效

     

    无效

    静态局部变量

     

    内存静态存储区

    (即数据段)

     

    有效

     

    无效

     

    有效

     

    有效

     

    无效

     

    无效

     

    寄存器变量

     

    CPU中的寄存器

     

    有效

     

    无效

     

    有效

     

    无效

     

    无效

     

    无效

     

     

    静态全局(外部)变量

     

    内存静态存储区

    (即数据段)

     

    有效

     

    有效

     

    有效

     

    有效

     

    有效

     

    无效

     

    非静态全局(外部)变量

     

    内存静态存储区

    (即数据段)

     

    有效

     

    有效

     

    有效

     

    有效

     

    有效

     

    可引用

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Core Text 实现富文本显示
    音视频直播服务平台总结
    WWDC2017那些事
    Swift网络请求(Moya篇)
    [转贴]孙正耀退休感言
    不要让专业限制了你的高度
    你会搞科研吗?
    上传服务端
    AysnTask+HttpClient实现上传
    TextView改变颜色
  • 原文地址:https://www.cnblogs.com/Mylimo/p/2359097.html
Copyright © 2020-2023  润新知