编译器是否忽略了寄存器声明?

时间:2012-03-15 09:11:51

标签: iphone c cocoa-touch cpu-registers

在iPhone开发中使用plain C时,编译器是否将声明为register的变量放在CPU寄存器中?

3 个答案:

答案 0 :(得分:4)

唯一可以确定的方法是查看编译器的文档,如果没有描述register的作用,那么它可以做任何事情(在标准定义的参数范围内)。

答案 1 :(得分:1)

register只是编译器的一个建议性提示;它并不能保证变量真正放在寄存器中。

如果没有备用寄存器可用,变量仍然在堆栈中。

答案 2 :(得分:0)

register关键字不是指CPU的硬件寄存器。它不可能,因为您可以声明任何类型的变量register,也可以声明那些永远不适合硬件寄存器的类型。

只是与编译器签订合同,你永远不会获取这样一个变量的地址。您的这样的承诺将简化编译器优化的任务。特别是你的变量永远不会别名,更常见的是它不能从直接控制流外部改变。