c - 编译器决定放入寄存器的变量的运算符地址会发生什么?

标签 c gcc clang compiler-optimization

我知道在 C 中,如果使用 register 显式指定了一个变量关键字,则不能使用 &运算符,这对我来说很有意义,即没有始终保存在寄存器中的变量的“地址”这样的东西。
我的问题是,如果编译器自行决定将变量存储在寄存器中而不是将其溢出,那么 & 会发生什么?代码执行期间的运算符?
我可以想到编译器可能会尝试处理的两种方法:

  • 尝试模仿 &行为,但这似乎很麻烦,我不知道如何严格有效地做到这一点。
  • 如果 & 总是溢出变量运算符与此变量一起使用。

  • 在这种情况下,C 是采用其中一种方法还是执行其他操作?

    最佳答案

    变量是否在硬件寄存器中实现的事实必须对用户完全透明。由编译器来实现这一点,以便始终可以通过指针访问当前值。
    当用户决定使用关键字 register 声明变量时,情况会发生变化。 .然后使用&运营商被简单地禁止。

    关于c - 编译器决定放入寄存器的变量的运算符地址会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62756488/

    相关文章:

    c - 在 C 中声明可变大小的数组

    c - 我的老师做了这个功能,但我不明白它有什么用

    c++ - GCC 3.3 具有类似于 GCC 3.4 的静态常量变量

    Android Studio Cmake 构建错误 : invalid conversion between vector type

    c++ - 将大括号括起来的初始值设定项列表返回为结构体

    c++ - C 中指向 char 的指针的默认值

    c - x86_64:堆栈框架指针几乎没有用吗?

    c - Berkeley Sockets,打破别名规则?

    c++ - Clang AST 匹配器 : How to find calls to a perfectly forwarding function called with rvalues?

    c - 将数据输入到函数