1

有没有办法知道编译器在 c 中使用的访问说明符。例如 - 在寄存器变量的情况下,这完全取决于编译器来决定变量的访问说明符是自动还是寄存器。有没有办法动态知道编译器选择了什么访问说明符?

4

3 回答 3

3

我们正在混合语言的规范级别和您的程序在机器代码中的实现。这里的两个术语“寄存器”只是松散相关。

关键字的措辞register令人困惑,用词不当。register仅表示您不允许获取此类变量的地址。无论您的编译器是否在堆栈上实现变量并直接寻址它或将其存储在 CPU 寄存器中,都不是您可以依赖的稳定的。它将从编译器更改为编译器版本和优化级别。

正如其他人所说,如果您对微优化感兴趣,您可以阅读汇编程序以了解特定编译,但总的来说,您甚至不必担心。

于 2011-08-09T09:55:01.853 回答
1

将 C 模块编译为汇编并阅读。请注意,某些编译器可能会在链接之前执行整个程序优化,因此即使汇编程序输出也不是 100% 可靠的。

于 2011-08-09T09:37:51.963 回答
1

您可以获取变量的地址并根据架构获得提示。但是这种方法可能会迫使编译器将变量分配到内存而不是寄存器中。

于 2011-08-09T09:30:10.503 回答