• 4.7 C语言的存储类,作用域,生命周期,链接属性


    C语言背后的运行机制,学会了会对C语言更加熟悉,可以直接看到C语言的骨头里去。

     

    存储类(storage class):

      ①什么是存储类?

      存储类就是变量存储类型,即变量在内存中存储在什么段。

      例如:栈:普通局部变量。 

         数据段(.data):初始化不为零的全局变量,静态局部变量。 

         bss段:初始化为零 或 未初始化的全局变量。 (其实bss段就是初始化为0的数据段)

           代码段(.text):存放程序执行代码的一块内存区域。

      

      ②存储类相关的关键字?

      auto  static  register  extern  volatile  restrict  typedef

      详解:

      auto:作用: 是修饰局部变量。 存储类:局部变量存储在栈上。栈有四个特性:反复使用;脏内存;临时性;栈会溢出;

      

      static: 作用:首先static有两个作用(平时记得不是很清楚),

          ①修饰局部变量,成为静态局部变量。

            什么是静态局部变量?          答:  静态局部变量是带static修饰的普通局部变量;

              静态局部变量存储在哪儿? 答: 静态局部变量存储在数据段;

            为什么会有静态局部变量?   答:

            静态局部变量 它和非静态局部变量有什么区别?  答:静态局部变量存储在数据段/bss段。非静态局部变量分配在栈上。由于静态局部变量分配在数据段、bss

                                      段,所以允许对构造类静态局部量赋初值。若未赋以初值,则由系统自动赋值。数值型变量自动赋初值

                                      0,字符型变量赋空字符。

          ②修饰全局变量,成为静态全局变量。

            全局变量和静态全局变量的区别:链接属性不同,

     

          ps:静态局部变量和全局变量的区别:

                          相同点:

                                静态局部变量和全局变量存储类相同,都是存储在数据段/bss段

                               静态局部变量和全局变量的生命周期相同,都是伴随着整个源程序。

                          不同点:  

                             作用域:静态局部变量是代码块作用域(和自动局部变量一样)。而全局变量是文件作用域(和函数一样)。

                              链接属性:静态局部变量无链接。而全局变量是外链接。

        

      register: 作用:把修饰的变量尽可能的储存到寄存器中。

              ①为什么要放到寄存器中?    答:平时变量是存储在内存中的,加上register后,会尽量放在寄存器中,因为寄存器和内存相比,寄存器里CPU近,

                                所以访问变量的速度更快。

                             说明:数据从内存里拿出来先放到寄存器,然后CPU 再从寄存器里读取数据来处理,处理完后同样把数据通过寄存器存

                                放到内存里,CPU 不直接和内存打交道

              ②有什么好处?有什么缺陷?  答:好处是CPU里寄存器近,register修饰的变量用在那种变量被反复高频率的使用,通过改善这个变量的访问效率可以极

                               大的提升程序运行效率时。所以register是一种极致提升程序运行效率的手段。

                               缺陷:CPU的寄存器本来就很少,而且是尽可能的将变量分配到寄存器中。所以平时定义register变量要慎用。

      extern: 作用:主要是修饰                                                                                       

      volatile:

      restrict:

      typedef:

     

    总结 存储类的出现也是因为操作系统对内存的管理机制所导致的,变量会存储在不同的内存中。

     

    作用域(scope):

      ①局部变量的代码块作用域;

      ②函数名和全局变量的文件作用域

      ③同名变量的掩蔽规则

        

    生命周期(lifetime):

  • 相关阅读:
    从屏幕截取一块区域,将其赋给imageView
    oc 中随机数的用法(arc4random() 、random()、CCRANDOM_0_1()
    UIPopoverController
    IOS-- UIView中的坐标转换
    TCP、UDP的区别
    TCP/IP协议简单介绍
    NSTimer类的使用
    UI基础-网络编程
    IOS面试中的一些问题
    iOS开发UI篇—UITabBarController简单介绍
  • 原文地址:https://www.cnblogs.com/yr-linux/p/4935265.html
Copyright © 2020-2023  润新知