【发布时间】:2017-05-04 14:50:39
【问题描述】:
对于 C 和 C++ 语言,编译器是否优化了对常量变量的引用,以便程序自动知道引用了哪些值,而不必查看常量变量的内存位置?说到数组,是否取决于数组中指向的索引值在编译时是否为常量?
例如,看看这段代码:
int main(void) {
1: char tesst[3] = {'1', '3', '7'};
2: char erm = tesst[1];
}
编译器是否在编译时将第 2 行“更改”为“char erm = '3'”?
【问题讨论】:
-
它可能会也可能不会 - 取决于编译器、其版本、优化级别、所涉及代码的复杂性等。检查您的编译器为您的目标平台生成的程序集。
-
gcc6.2 会根据需要优化 -O1 或更高版本:godbolt.org/g/yFLoYo
-
您可以通过获取反汇编程序并查看经过反汇编的优化代码自己轻松回答这些问题。例如 Codeblocks IDE -> 调试器窗口 -> 反汇编。您不必成为 x86 汇编器方面的专家,也可以基于此获得粗略的想法。
-
afaik,一般
const只表示对象的可观察状态不能改变。但是,const对象可能具有mutable私有字段,在这种情况下,不能使用副本来代替对对象的引用
标签: c++ c performance optimization memory-management