zoukankan      html  css  js  c++  java
  • 存储类别

    C程序生成过程,预编译(宏处理),编译,汇编,链接  

    链接属性:

      1.外部链接。

      2.内部链接,只在本翻译单元可见。

      3.无链接。

    作用域:

      1.块作用域。

      2.函数作用域。

      3.文件作用域。

    作用域和链接描述了标识符的可见性。存储器描述了标识符访问的对象的生存期。有四种存储期。

      1.静态存储期,运行期间一直存在.

      2.线程存储期,从声明到线程结束一直存在,使用关键字_Thread_local关键字,每个线程获得该变量的私有备份.

      3.自动存储期.

      4.动态分配存储期.

    存储类别 存储期 作用域   链接 声明方式
    自动 自动 块内
    寄存器 自动 块内,使用关键字register
    静态外部链接 静态 文件 外部 所有函数外
    静态内部链接 静态 文件 内部 所有函数外,使用关键字static
    静态无链接 静态 块内,使用关键字static

    声明在块或函数头中的任何变量都属于自动存储类别,为了更清楚的表达你的意图,(例如表明有意覆盖一个外部变量定义,或者强调不要把变量改为其他存储类别)可以显式使用auto关键字,

    int main()
    {
        auto int plox;
        return 0;  
    }

    但是在C++兼容的程序用不要使用auto,语义不同,C++中auto表示变量类型自动推导。

    register关键字声明的变量更多像是一种请求,编译器根据寄存器或最快可用内存的数量衡量请求,或者直接忽略请求,如果忽然了请求,那么寄存器变量就变成了自动变量,即使是这样,仍然不能获取变量的地址(寄存器没有地址)。

    int main(void)
    {
       register int quick;
      return 0;
    }

    动态内存使用malloc()函数申请,使用free()函数释放,需要手动管理。

    restrict关键字允许编译器优化某部分代码,它只能用于指针,表明该指针是访问数据对象的唯一且初始的方式。restrict关键字有俩个读者,一个是编译器,该关键字告诉编译器可以自由假定一些优化方案。另外一个读者是用户,该关键字告知用户要使用满足restrict要求的参数。编译器不会检查用户是否遵循这一原则,但是无视它后果自负。

  • 相关阅读:
    Java Output流写入包装问题
    SpringBoot项目单元测试不经过过滤器问题
    SpringSecurity集成启动报 In the composition of all global method configuration, no annotation support was actually activated 异常
    JWT jti和kid属性的说明
    Maven 排除依赖
    第五章 基因概念的发现
    第三章 孟德尔遗传的拓展
    第二章 孟德尔遗传
    第一章 引言
    GWAS全基因组关联分析
  • 原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/10970982.html
Copyright © 2011-2022 走看看