性能测试案例

案例描述

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 局部变量累积结果,避免 限制。

效果

  • 消除不必要的函数调用开销
  • 减少内存访问次数
  • 为编译器创建更好的优化条件

相关笔记:

链接到