一.关键字register

       register——寄存器关键字,提到寄存器首先我们先了解一下电脑的存储设备:

C语言中关键字:register、typedef、static_高速缓存

       图中三角形内的硬件,由下到上价格越来越高,速率越来越快,存储内存越来越低。

       最早的时候,CPU在处理任务的时候都是直接从内存中拿数据,但是随着技术的快速进步,CPU的设计使得处理速度越来越快,而硬件的速度难以跟上CPU的发展速度,所以导致CPU的数据已经处理完,却还要等一段时间才能拿到下一个数据,使得性能越来越慢。那怎么办呢?于是就有了高速缓存和寄存器的出现,比内存快一些的高速缓存直接从内存中获取数据,比高速缓存快一些的寄存器再从高速缓存中获取数据,这样就大大减少了CPU获取数据的等待时间,提高了整体性能。

 现在我们来看register关键字怎么用:

#include<stdio.h>
int main()
{
int a=10;
register int b=12;
printf("%d %d\n",a,b);
return 0;
}

我设置了两个变量a,b。register就是建议把b=3存放在寄存器中,以便可以以更快的速度访问。但是当然只是建议,因为都这样定义的话,寄存器也没有那么多空间可以放,最后放不放还是由编译器进行决定的,如果是经常大量使用的话可以尝试着使用register。


二.关键字typedef

       typedef 顾名思义是类型定义,这里应该理解为类型重命名。比如:

C语言中关键字:register、typedef、static_寄存器_02

  他的意思可简单理解就是重命名,上面就是把unsigned int重命名为u_int,比如大家把张三起个小名小三一样,张三是这个人,小三也是这个人。


三.关键字static

       在C语言中,static是用来修饰变量和函数的:

       1.修饰局部变量-静态局部变量

       2.修饰全局变量-静态全局变量

       3.修饰函数-静态函数

静态局部变量:

#include<stdio.h>
void test()
{
int a=1;
a++;
printf("a=%d\n",a);
}
void test1()
{
static int a=1;
a++;
printf("a=%d\n",a);
}
int main()
{
int i=0;
while(i<5)
{
test();
i++;
}
return 0;
}


我定义了两个函数,test和test1,前者没用static,那么程序运行会出现什么结果呢  

           

C语言中关键字:register、typedef、static_寄存器_03

   

左边第一个运行的是test函数即没有用static,第二个是用test2函数用static修饰了局部变量a。我们可以看到,左边的a一直是2是因为引用函数test时又重新给a赋值为1,再++后就变成了2;而第二个很明显a就直接进行了累加处理而没有重新赋值1,这就说明:static修饰局部变量,把局部变量的生命周期变长

静态全局变量

       全局变量具有全局属性是因为其具有链接属性,而static修饰全局变量就可以改变全局变量的连接属性,可以使它的作用域变小,仅仅局限于当前文件下,它的生命周期没变,因为其仍然存储在静态区上

C语言中关键字:register、typedef、static_高速缓存_04

静态函数

        它的作用跟静态全局变量作用效果基本一样,都是改变其作用域,或者说改变函数的连接属性,将其原本的的外部链接属性变为内部链接属性

C语言中关键字:register、typedef、static_寄存器_05