【问题标题】:is register data type variables are limited?是寄存器数据类型变量是有限的?
【发布时间】:2015-01-05 19:50:17
【问题描述】:

我完全被这个问题所困扰,我听说有 5 到 10 个变量只能声明具有 datatype 的寄存器。我想知道要声明多少个注册数据类型变量。看起来很漂亮。但是我们在执行程序时需要这种程度的理解。否则我们可能会在执行时卡在运行时感谢您提前回答

1).is 寄存器(用于数据类型)因不同类型的编译器/机器而异??
2).我们可以选择多少个寄存器数据类型变量?
3).这些寄存器是什么?(我的意思是cpu reg,memory reg,通用reg???)

【问题讨论】:

    标签: c linux storage cpu-registers


    【解决方案1】:

    不要使用寄存器。验光器会做得更好

    【讨论】:

      【解决方案2】:

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

      今天,它仅仅意味着限定为register 的变量不能是& 一元address-of 运算符的操作数(注意register 是类似const 的限定符或volatile 是,而不是像int 这样的数据类型。

      在 1990 年代,register 是当时编译器的重要关键字。

      编译器(在优化时)在register allocation 和溢出方面做得很好。

      尝试编译你喜欢的 C 函数,例如gcc -Wall -O2 -fverbose-asm -S;你会得到一个后缀为 .s 的汇编文件,你可以看看里面;编译器在寄存器分配方面做得很好。

      请注意,GCC 提供语言extensions 以将一些全局(或局部)变量放入explicit registers。这很少有用,它是目标处理器和 ABI 特定的。

      顺便说一句,在台式机或笔记本电脑处理器上,CPU cache 比寄存器更重要(请参阅this answer 中的参考和提示以回答另一个问题)。

      【讨论】:

        【解决方案3】:

        在 C 中,无法在 CPU registers 中显式定义变量。您可能几乎不会用 register 说明符提示编译器,但现在没有必要这样做,因为编译器有 sophisticated optimizer,它负责寄存器分配。

        【讨论】:

          猜你喜欢
          • 2017-06-15
          • 2019-03-13
          • 1970-01-01
          • 2012-06-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-23
          • 2017-08-20
          相关资源
          最近更新 更多