【发布时间】:2020-09-04 13:36:16
【问题描述】:
我知道 inline 关键字使编译器更有可能内联函数,尽管决定权取决于编译器,而 GNU 扩展 __attribute__((always_inline)) 强制编译器内联它。
相应地,有没有……
__attribute__((always_register)) register int foo = 678;
...或类似的东西?
【问题讨论】:
-
如果你
always_register的变量多于寄存器会怎样? -
@RaymondChen 如果不能内联标记为
always_inline的函数,也会发生同样的事情。 -
force 希望没有,编译器比你更清楚该做什么,你不确定是否有足够的寄存器用于其余代码,以及当你调用函数时/方法被调用者无法知道寄存器是“保留”的,因此该值必须保存在其他地方
-
如果您需要这种级别的控制,请自己在汇编程序中编写。如果这是出于性能原因,请相信编译器或自己在汇编中编写它。
-
有一个名为
register的关键字(仍然存在,但现在已弃用)给编译器一个提示,表明在其中存储一些内容是个好主意一个寄存器。现在人们大多依靠编译器优化来找出最好的。
标签: c++ cpu-registers