寄存器存储类的任何固定寄存器
问问题
72 次
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 回答