性能测试案例
案例描述
CSAPP 使用向量(数组)的求和与求积运算作为贯穿全章的优化案例。
typedef struct {
long len;
data_t *data;
} vec_rec, *vec_ptr;优化步骤
1. 将 vec_length 移出循环
将 vec_length(v) 提取到循环外()。
2. 将 get_vec_start 移出循环
避免每次迭代都调用 get_vec_start 获取数据指针。
3. 引入局部变量
void combine(vec_ptr v, data_t *dest) {
long length = vec_length(v);
data_t *data = get_vec_start(v);
data_t acc = IDENT;
for (long i = 0; i < length; i++)
acc = acc OP data[i];
*dest = acc;
}通过 acc 局部变量累积结果,避免 限制。
效果
- 消除不必要的函数调用开销
- 减少内存访问次数
- 为编译器创建更好的优化条件
相关笔记:
链接到
- 上一个知识点:5.7 CPE与程序性能度量
- 下一个知识点:5.9 现代处理器架构