C语言深度剖析
一、关键字
1.1 最快的关键字-register
register
这个关键字请求编译器尽可能将变量存在CPU内部寄存器中,而不是通过内存寻址以提高效率。
注意是:尽可能、而不是绝对
1.1.1 皇帝身边的小太监-寄存器
不知道什么是寄存器,那见过太监没有其实寄存器就是相当于。一个cpu的中转站并没有其他功能。
好,那我们再连线一下我们的cpu cpu不就是皇帝同志吗?大神就相当于我们的内存数据从他这拿出来,那小太监就是我们的寄存器了。数据从内存拿出来要先放到寄存器,然后cpu再从寄存器里读取数据处理,处理完后同样把数据通过寄存器存放到内存里。Cpu不直接和内存打交道,这里要说明的一点是小太监是主动从大臣手里接过奏章,然后主动地交给皇帝同志。但寄存器没有那么自觉,他从不主动干什么事,一个皇帝可能有好几个小太监,那么一个cpu就也有可能有很多起人气。不同的型号的cpu拥有的寄存器的数量不一样。
为啥要这么麻烦啊?原因就是速度吸尘器其实是一块很小的内存空间,只不过其存储速度要比内存快的多。所谓近水楼台先得月嘛,它距离cpu很近,cpu一伸手就拿到数据了,比在那么大的一块内存里去寻找某个地址上的数据是不是快的多了,那有人要问,既然它速度那么快,那我们的内存硬盘都换成计算器得了呗。我要的要说的是:你可真有钱。
总结:寄存器作为CPU的助手,访问速度要比内存快,但是寄存器成本比内存高。
1.1.2 使用register修饰符注意点
虽然计算器的速度非常快,但是使用 register修饰符也有限制的register变量必须能被cpu寄存器所接受的类型意味着register变量必须是一个单个的词。并且其长度应该小于等于整形的长度,而且register变量可能不存放在内存中,所以不能使用取地址符"&"来获取register变量的历史。<