c - 冗余分配消除是相当典型的优化吗?

标签 c compiler-construction compiler-optimization

鉴于以下情况:

len = strlen(str);
/* code that does not read from len */
len = new_len;

我可以依靠编译器删除第一行吗?

我正在编写代码生成脚本。第一行在一个地方生成,而随后的所有内容都在别处生成(通过后代类中的虚函数)。大多数时候,不需要 len。有时,它是。我想知道我是否可以在所有情况下都设置它并让编译器在不需要时删除该行。

最佳答案

不,当然你不能“依赖”编译器所做的优化选择。

它们可以随用户的心血来潮(编译器命令行选项)或不同的编译器版本而改变。

由于语言标准不需要您描述的行为,因此您不能依赖编译器来实现它。

另一方面,您当然可以测试它,并尝试“哄骗”它进行优化,例如(再次)要求您的编译器进行尽可能多的优化。

关于c - 冗余分配消除是相当典型的优化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14481688/

相关文章:

c - 为什么循环顺序会影响二维数组迭代时的性能?

c - 不兼容的返回类型

c - 如何使 flex 使用包含文本的文件(.txt/.c/等)作为其输入

c++ - 奇怪的优化?在 `libuv` 中。请解释

c# - 了解编译器优化

c - 编译器优化导致的推测性错误是如何在幕后实现的?

c - 在结构体中设置 const char 指针

c - 编译器如何理解给定函数是按值传递还是按引用传递?

Java 注解无法从上层类访问 protected 静态字段

从一段单词创建哈希表和节点