C语言--类型限定

const

    const是代表一个不能改变的值的

volatile

    代表变量是一个可能被CPU指令之外的地方改变的

e.g. 

        #include <stdio.h>

                int main()

                {

                    int i = 10;

                    i = i+20;

                    i = i+30;

                    printf("%d\n",i);

                    return  0;

                 }

        如果是这样写的代码,那么编译器会觉得你很智障,它会自动把你的代码进行优化,它会

优化成i= i+50;因为CPU通过电路来控制内存,但是如果有块内存,有外部设备也可以对它进行修改

如下图代码:

             #include <stdio.h>
              int main()
            {
     volatile int i = 100;
     int i = 100;
     //如果这个时候外部设备改了i的值。那么这个时候后面的i就不再是以前的值
      i = i +5;
      i = i +10;
      i = i +30;
      printf("%d\n",i);
      return 0;

              }

所以volatile的意义就是:告诉编译器别自作聪明的给我把这些变量进行优化,因为这样写有用的有意义的,所以这时候编译器就会乖乖的一步一步进行编译。

register:

               e.g

                    _asm
 {
mov i, 100
mov eax, i
add eax, 50 
mov eax, i
add eax, 20
mov i,eax

}

这段汇编语言看起来非常复杂,经过优化的话,就可以变成这样

            _asm
{
mov i, 100
add eax, i
add eax,20
mov i, eax

但是对于CPU来讲:所有的计算工作都是在寄存器里面完成的,不能直接对内存的数进行运算的,它只能把内存里面的数拿到 寄存器里面算完,在退回去内存,它不能直接在内存里面算的 

    register int i;//变量i不是在内存里面,变量i就是在CPU的寄存器里面,

    那么这就更加优化了

                -asm

                {

                  mov eax, 100

                  add eax, 50

                  add eax, 20

                }

    但是regist是建议型的命令,而不是命令型的指令

建议型:因为对于C语言来讲,寄存器是有限的,万一没有寄存器可用了,那么它就会忽略这些优化,但是有寄存器的话就一定会对你的代码进行优化。

猜你喜欢

转载自blog.csdn.net/weixin_41998122/article/details/80364177
今日推荐