在IAR C / C ++编译器手册中,它指出编写优化友好的源代码:
避免使用&amp ;;取得局部变量的地址。运营商。这是低效的 主要有两个原因。首先,变量必须放在内存中,因此不能 放在处理器寄存器中。这会导致代码越来越大。第二, 优化器不能再假设局部变量不受功能影响 调用
还有哪些方法可以获取局部变量的地址?显然我知道,如果我有一个指向该变量的指针,我可以使用它,如果我有一个数组,我可以使用数组名称,但是我不知道任何其他方法来获取局部变量的地址而不是&安培;操作
答案 0 :(得分:6)
没有其他方法可以获取地址[*]。该建议中“使用&
运算符”的文字是多余的。我想只是在那里提醒你哪个运营商是地址的运营商,以防你不清楚你应该避免使用什么。
它所谈论的优化是:
1)如果您不接收地址,则该变量不需要拥有地址。
2)如果地址永远不会“逃脱”编译器可以看到的代码,那么编译器可以假设该值不会通过它看不到的代码而改变。不使用地址可以确保这一点,但在某些情况下,编译器即使在获取地址时也可以进行转义分析。
对于这些目的中的任何一个,如何采用地址都无关紧要,所以如果 采用另一种方式来获取C中的地址,那么建议就必须在&
运营商。
[*] [编辑:啊哈!我有点不对劲。如果变量是一个数组,那么你可以在不使用&
运算符的情况下获取其地址,只需让它衰减到指向第一个元素的指针即可。我不知道IAR编译器是否实际上将足够小的数组优化到寄存器中,如果没有,则不需要提及它。但它肯定是允许的。]