共享公用子表达式
概念
共享公用子表达式(Common Subexpression Elimination, CSE)是指将程序中重复出现的相同计算提取为临时变量,避免多次计算相同表达式。
示例
// 优化前:重复计算
int x = arr[i] + offset;
int y = arr[i] * 2 + offset;
// 优化后:提取公用子表达式
int tmp = arr[i];
int x = tmp + offset;
int y = tmp * 2 + offset;编译器支持
大多数现代编译器会自动执行公用子表达式消除。但在某些情况下,表达式的形式略有不同(如 arr[i].x 和 arr[i].y 共享 arr[i] 的地址计算),编译器可能无法识别。
手工优化的价值
- 帮助编译器生成更优代码
- 减少带来的限制
- 配合进一步提升性能
相关笔记:
链接到
- 上一个知识点:5.3 复杂运算简化
- 下一个知识点:5.5 函数调用优化限制