0
点赞
收藏
分享

微信扫一扫

关键字(1)auto和register详解

灯火南山 2022-05-02 阅读 59

文章目录

关键字第一讲

关键字分类

程序的概念

那么程序在没有运行的时候是在哪里呢?

我们要知道,任何程序在运行之前都必须被加载到内存之中,之后才可以运行。我们平常双击打开软件其实就是将软件程序加载到内存之中。

为什么要这么做呢?原因很简单,效率高,因为cpu的读取速度很快,但是硬盘的速度很慢,这时候要把硬盘中要使用的数据预加载到内存中,然后cpu既可以很快的读取到数据。

变量

为什么要定义变量

计算机的作用是计算数据,但是在程序中,并不是所有的数据都在一上来就被计算的,这是就需要吧数据暂时储存起来,于是就用到了变量。当然有人会问,我们用到数据直接去硬盘里面取出不就行了吗?这种方法当然可以但是效率会很低。

定义变量的本质是

变量声明的本质是(通常声明全局变量)

广而告之
声明可以有很多次,但是定义只能有一次。(你可以多次声明你有女朋友但是你表白只能表白一次)

变量的赋值和初始化

变量初始化,就是我们在定义变量的时候就给他放一个初值,这是他与生俱来的。
赋值就是,我们在已经开辟好的空间内放入一个值,只是后天的。

1.1关键字auto

auto只能用来修饰局部变量。
auto就是其字面意思,自动开辟空间,自动销毁空间。
我们定义的局部变量默认都是auto类型的

int a = 10;
auto int a = 10;//这两个是一样的,第一个省略了auto

说道变量就不得不提到变量的作用域和生命周期了

作用域(是一个空间的概念)

它说明了这个变量在这个范围内是有效的而出了这个区域就是无效的

生命周期(是一个时间点的概念)

这里要注意是时间点,他不是一个具体到多少分钟这种概念。
生命周期表示的是变量从创建到释放的这两个时间点。

局部变量

理解了作用域和生命周期可以之后来看局部变量
局部变量的作用域在他所处的那个代码块内,也就是那个大括号内。
局部变量的生命周期就是从定义处开始到出作用域变量释放这个时间点
局部变量的定义是在对应的函数栈帧上开辟的。

#include<stdio.h>
int a = 10;
int main()
{

    for(int i=0;i<10;i++)
    {
        int a = 20;
        printf("%d",a);//这里打印的是20
        if(1)
        {
            int a = 30;
            printf("%d",a);//这里打印30;
        }
        printf("%d",a);//这里打印20
    }
    printf("%d",a);//这里打印10

    return 0;
}

上述代码说明了,局部变量在他所在的代码块才可以使用,而全局变量在哪里都可以使用。并且发生命名冲突的时候局部变量范围内全局变量不起作用。

2.关键字register

寄存器
cache
内存
ssd、硬盘、flash

自下而上,这些硬件容量越来越小,效率越来越高,价格越来越贵。而我们cpu的计算速度是非常快的。那么如何让高速的cpu和低速的硬件相匹配呢?
这就要用到缓存计数,我们将要用到的数据从硬盘拿到内存中,在有内存加载到高速缓存和寄存器中。这样cpu就可以快速的计算数据了。
所以我们上面描述的硬件都是下游硬件的缓存。

  1. 局部的(全局会导致CPU寄存器被长时间占用)
  2. 不会被写入的(写入就需要写回内存,后续还要读取检测的话,register的意义在哪呢?)
  3. 高频被读取的(提高效率所在)
  4. 如果要使用,请不要大量使用,因为寄存器数量有限
举报

相关推荐

0 条评论