1

在 IAR C/C++ Compiler 手册中,它指出编写优化友好的源代码:

避免使用 & 运算符获取局部变量的地址。由于两个主要原因,这是低效的。首先,变量必须放在内存中,因此不能放在处理器寄存器中。这会导致代码更大更慢。其次,优化器不能再假设局部变量不受函数调用的影响。

还有哪些其他方法可以获取局部变量的地址?显然,我知道如果我有一个指向该变量的指针,我可以使用它,如果我有一个数组,我可以使用数组名称,但是我不知道除& 操作员。

4

1 回答 1

6

没有其他方法可以获取地址[*]。该建议中的“使用&运算符”文本是多余的。我想它只是为了提醒您哪个运算符是地址运算符,以防您不清楚应该避免使用什么。

它正在谈论的优化是:

1)如果你不取地址,那么变量不需要地址。

2)如果地址永远不会“转义”编译器可以看到的代码,那么编译器可以假设该值不会通过它看不到的代码改变。不获取地址可以确保这一点,但在某些情况下,即使获取了地址,编译器也可以进行转义分析。

对于这两个目的,如何获取地址实际上并不重要,所以如果有一种方法可以在 C 中获取地址,那么建议必须在操作员旁边提及它&

[*] [编辑:啊哈!我有点错。如果变量是一个数组,那么您可以在不使用&运算符的情况下获取它的地址,只需让它衰减到指向第一个元素的指针。我不知道 IAR 编译器是否实际上将足够小的数组优化到寄存器中,如果没有,则无需提及。但它肯定是允许的。]

于 2012-10-18T16:59:26.693 回答