-1

寄存器存储类的任何固定寄存器

4

2 回答 2

4

register是对编译器的建议,它可能希望将指定的变量放在寄存器中。

它不是必须将其放入寄存器的命令。

编译器可以选择将变量放入哪个寄存器,或者完全忽略该建议。

于 2018-04-05T14:59:29.477 回答
3

在上个世纪,register这是编译器尝试将该变量放入处理器寄存器的提示

今天,在大多数编译器上,这个提示几乎被忽略了。但是您仍然不能获取&声明的变量的地址(使用一元运算符)register。所以今天register对编译器意味着“我不会获取那个变量的地址”(因此,register存储类几乎从未在最近编写的代码中使用)。有些人认为这register可能会在未来的标准(C 和 C++)中被弃用,或者该关键字将被重用于其他目的。

优化编译器具有复杂的寄存器分配指令调度(另请参见this)。细节取决于优化级别、目标处理器的指令集架构ABI等......所以给定的变量可能会被完全忽略(如果编译器不需要它),或者可以放在寄存器中,或者可以坐在调用堆栈等...(并且该状态可能因编译函数的不同点而异)。

使用GCC,您可以编译您的foo.c文件gcc -O -fverbose-asm -S foo.c并查看生成的foo.s汇编程序文件(并且您可以改变优化级别,例如使用-O2等...)。

关于性能,今天的CPU 缓存非常重要,不仅仅是寄存器。

于 2018-04-05T14:59:24.003 回答