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要求的参数。编译器不会检查用户是否遵循这一原则,但是无视它后果自负。

  • 相关阅读:
    上下文调用(call , apply , bind)
    源码学习第七天(水滴石穿)
    学习源码第六天(加油别放弃)
    学习源码第五天(难得可贵)
    学习源码第四天(昨天只看了一点正则,发现正则真的水很深,但很有魅力)
    简单谈谈$.merge()
    学习源码第三天(短暂的坚持)
    学习源码第二天(渐入佳境)
    jquery源码学习第一天
    经典面试题简单分析
  • 原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/10970982.html
Copyright © 2011-2022 走看看