【问题标题】:what are valid register variable types什么是有效的寄存器变量类型
【发布时间】:2017-06-15 21:59:17
【问题描述】:

我想知道使用 register 关键字有效的变量类型以便快速访问。例如我可以有

register int i;
register char ch;
register float f;

我还想知道我可以在我的程序中声明多少个寄存器变量。

【问题讨论】:

  • 这取决于编译器和架构。没有“一般情况”的答案。一些编译器完全忽略 register 关键字,即使没有开启任何优化。
  • 这个问题只有在特定实现的上下文中才有意义。\
  • 寄存器存储说明符最初只适用于 int、char 或指针类型的变量。
  • 我认为现代编译器非常聪明,因此它们会隐式优化常用变量以提高速度(快速访问)并将它们放入 CPU 寄存器中。因此,如今优化器非常擅长寄存器分配,以至于程序员通过 register 关键字强制执行其意愿的任何尝试都可能导致悲观情绪,因此编译器会简单地忽略它。现在不使用 SIMPLY PUT:register 关键字。
  • 此外,限制变量的范围并将变量声明为const 并最接近使用情况将使编译器能够更好地使用寄存器。

标签: c++ cpu-registers


【解决方案1】:

The register keyword 在 C++11 中已弃用,因为在 C++17 中未使用和保留

你不应该使用它,如果它真的对现代编译器有任何意义,我也会感到惊讶。

【讨论】:

    【解决方案2】:

    注意register 关键字在 C++17 之前已弃用,自 C++17 起未使用和保留。

    泛泛而谈

    寄存器存储说明符最初仅适用于 int、char 或指针类型的变量。但是,它适用于任何类型的变量。实际上,寄存器仅对整数和字符变量有显着影响。还要记住,寄存器说明符应用于局部变量和函数的形式参数(不允许全局寄存器变量)。

    其实你不必担心声明很多寄存器变量。如果寄存器变量过多,编译器会自动将它们转换为非寄存器变量(如果达到限制)。 CPU 寄存器中至少可以保存两个 int 或 char 类型的寄存器变量。

    【讨论】:

    • 答案的第一句话只讲述了故事的一半,并且很容易被(错误?)解释为 register 可以从 C++17 开始使用。我在标准中找不到提到 register 仅对整数和字符类型有显着影响的内容您的声明来源是什么? (题外话:分类有点多余,因为字符类型是整数)。
    • @user2079303 source is The Complete reference Fourth Edition by Herbert Schildt page 32 under register Variables last para home.iitj.ac.in/~ug201310035/…
    猜你喜欢
    • 2015-01-05
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2019-03-13
    • 2012-06-15
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多