鉴于以下情况:
len = strlen(str);
/* code that does not read from len */
len = new_len;
我可以依靠编译器删除第一行吗?
我正在编写代码生成脚本。第一行在一个地方生成,而随后的所有内容都在别处生成(通过后代类中的虚函数)。大多数时候,不需要 len。有时,它是。我想知道我是否可以在所有情况下都设置它并让编译器在不需要时删除该行。
最佳答案
不,当然你不能“依赖”编译器所做的优化选择。
它们可以随用户的心血来潮(编译器命令行选项)或不同的编译器版本而改变。
由于语言标准不需要您描述的行为,因此您不能依赖编译器来实现它。
另一方面,您当然可以测试它,并尝试“哄骗”它进行优化,例如(再次)要求您的编译器进行尽可能多的优化。
关于c - 冗余分配消除是相当典型的优化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14481688/