register
是C和C++编程语言里的一个存储类说明符
基本含义
register
关键字的主要作用是建议编译器将变量存储在CPU的寄存器中,而不是内存里。寄存器是CPU内部的高速存储单元,和内存相比,寄存器的读写速度要快很多。要是变量被频繁访问,把它放在寄存器里就能显著提升程序的运行效率。
代码示例
#include <stdio.h>
int main() {
register int i;
for (i = 0; i < 10; i++) {
printf("%d ", i);
}
return 0;
}
在这个例子中,register
关键字表明变量 i
会被频繁使用,所以建议编译器把它存到寄存器中。
使用注意事项
- 只是建议:编译器不一定会遵循
register
关键字的建议。要是寄存器资源不足,编译器可能会把变量存到内存中。 - 不能获取地址:由于寄存器没有内存地址,所以不能使用取地址运算符
&
来获取register
变量的地址。下面的代码就是错误的:
register int num = 10;
int *ptr = # // 错误:不能获取 register 变量的地址
- 适用场景:
register
关键字适合用于频繁访问的变量,像循环控制变量这种。不过在现代编译器中,智能的优化器通常能自动识别出哪些变量适合放在寄存器中,所以在实际编程里,手动使用register
关键字的情况已经比较少了。
在不同编译器中的表现
- 早期编译器:在早期的编译器中,
register
关键字的作用比较明显,程序员使用它能有效提升程序性能。 - 现代编译器:现代编译器的优化能力已经很强,能够自动分析代码并决定哪些变量应该存放在寄存器中。因此,即使不使用
register
关键字,编译器也可能会把合适的变量放到寄存器里。例如,在GCC编译器中,就会根据代码的具体情况进行优化。