我完全坚持这个问题,我听说 5到10 变量只能声明注册的数据类型。我想知道有多少寄存器数据类型变量会声明。看起来很漂亮。但是我们在执行程序时需要这种理解水平。另外,我们可能会在执行时遇到问题,并提前感谢您的答案
1).is寄存器(对于数据类型)根据不同类型的编译器/机器而变化 2)。我们可以选择多种寄存器数据类型变量吗? 3)。所有这些寄存器是什么?(我的意思是cpu reg,memory reg,general purpose reg ???)
答案 0 :(得分:2)
register
在由最近的C optimizing compiler编译的C程序中不再是一个有用的关键字(例如最新版本的GCC或Clang/LLVM)。
今天,它只是意味着限定为register
的变量不能是&
一元地址运算符的操作数(注意register
是像const
或volatile
这样的限定符不是像int
这样的数据类型。
在20世纪90年代,register
是编译器的重要关键词。
编译器(优化时)在register allocation和溢出方面做得非常好。
尝试使用例如编译您最喜爱的C函数gcc -Wall -O2 -fverbose-asm -S
;你会得到一个后缀为.s
的汇编文件,你可以查看它内部;编译器在寄存器分配方面做得很好。
请注意,GCC提供语言extensions以在explicit registers中放置一些全局(或本地)变量。这很少有用,它是目标处理器和ABI特定的。
BTW,在台式机或笔记本电脑处理器上,CPU cache比寄存器更重要(参见另一个问题的this answer中的参考和提示)。答案 1 :(得分:1)
在C中,无法在CPU registers中明确定义变量。您可能几乎没有提示具有register
说明符的编译器,但现在没有必要这样做,因为编译器具有sophisticated optimizer,它负责寄存器分配。
答案 2 :(得分:0)
不要使用注册表。优化器将做得更好