zoukankan      html  css  js  c++  java
  • 存储类别、链接和内存管理

      C变量作用域:块作用域、函数作用域、函数原型作用域、文件作用域。

      C变量的3种链接属性:外部链接、内部链接、无链接。前三种作用域变量都是无链接(仅在作用域内被使用);文件作用域变量根据定义形式来看,如果是static则为内部链接(仅在本文件内被使用),否则为外部链接(能被多个文件共享)。

      存储期:静态存储期(文件作用域变量,存在于整个程序的执行时间内)

          线程存储期(用于并发程序设计,从被声明到线程结束)

          自动存储期(块作用域变量,从进入块到块结束;VLA变长数组略有不同,是从被声明到块结束)

      综合作用域、链接属性和存储期,可以得到C为变量定义的各种存储方案:

    5种存储类别
    存储类别  存储期 链接属性 作用域 声明方式
    自动 自动 块内,auto(缺省)
    寄存器 自动 块内,register
    静态内部链接 静态 内部 文件 所有函数外,static
    静态外部链接 静态 外部 文件 所有函数外
    静态无链接  静态 块内,static

      1、自动变量

        不会自己初始化。

      2、寄存器变量

        存储在CPU寄存器中,无法被访问地址。register的声明只是作为一种请求,即被声明的变量不一定就能存储在CPU寄存器中,因为前提需要CPU寄存器有空间来存放它。

      3、静态无链接变量

        具有块作用域,无链接,但是静态存储期使得它在块结束后不会消失,下一次进入块(例如多次的函数调用或者循环结构)时它保留有上次的值。

        未被显式初始化静态变量时,它们会被预置值为0。

      4、静态外部链接变量

        在所有函数外部声明。但本文件内函数中使用时可以用extern表明所使用的时文件作用域变量,也可不用extern;但当一个源代码文件使用的外部变量定义在另一个源代码文件中时,必须使用extern。

        未被初始化时缺省为0。

      5、静态内部链接变量

        在所有函数外声明,使用static。在本文件内部函数使用该变量时可用extern表明使用的是文件作用域变量,也可不用。静态内部变量不能再被其他文件使用。

        未被初始化时缺省为0。

      翻译单元:一个源代码文件及其头文件内容组成了一个翻译单元。

      当程序有多个翻译单元构成时,内部链接和外部链接的区别才体现出来。

      

      malloc和free函数必须配套使用,防止内存泄漏。

      静态数据(包括字符串字面量)、自动数据、动态分配内存的数据分别在内存中占不同的区域。

      

  • 相关阅读:
    应用程序无法启动,因为应用程序的并行配置不正确
    dotnetcore发布报版本错误
    C# 间隔时间休眠
    windows程序崩溃生成dump文件
    C# 委托的使用
    C# winform程序开机自启的方法
    win10Ping端口和查看端口占用
    415 DOM 查找列表框、下拉菜单控件、对表格元素/表单控件进行增删改操作、创建元素并且复制节点与删除、 对表格操作、通用性和标准的事件监听方法(点击后弹窗效果以及去掉效果)
    413 重温HTML + css 考试 + 访问HTML元素
    412 6个题 BOM and DOM 定义计数器 网页跳转 网页前进后退
  • 原文地址:https://www.cnblogs.com/lsh99k/p/9739671.html
Copyright © 2011-2022 走看看