寄存器数据类型变量是有限的吗?

时间:2014-11-09 12:16:09

标签: c linux storage cpu-registers

我完全坚持这个问题,我听说 5到10 变量只能声明注册的数据类型。我想知道有多少寄存器数据类型变量会声明。看起来很漂亮。但是我们在执行程序时需要这种理解水平。另外,我们可能会在执行时遇到问题,并提前感谢您的答案

1).is寄存器(对于数据类型)根据不同类型的编译器/机器而变化 2)。我们可以选择多种寄存器数据类型变量吗? 3)。所有这些寄存器是什么?(我的意思是cpu reg,memory reg,general purpose reg ???)

3 个答案:

答案 0 :(得分:2)

register在由最近的C optimizing compiler编译的C程序中不再是一个有用的关键字(例如最新版本的GCCClang/LLVM)。

今天,它只是意味着限定为register的变量不能是&一元地址运算符的操作数(注意register是像constvolatile这样的限定符不是像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)

不要使用注册表。优化器将做得更好