Combine

void Combine1(ver_ptr v,data_t *dest)
{
    long il;
    
    *dest = INENT;
    for(i = 0; i < vec_length(v); i++){
        data_t val;
        get_val_element(v,i, &val);
        *dest  = * dest OP val;
     }
}

void Combine2(ver_ptr v, data_t *dest)
{
    long i;
    long length = vec_length(v);
    
    *dest=IDENT;
    for(i = 0; i < vec_length(v); i++){//优化方式 代码移动
        data_t val;
        get_val_element(v,i, &val);
        *dest  = * dest OP val;
     }
}

void Combine3(ver_ptr v, data_t *dest){
    long i;
    long length = vec_length(v);
    data_t *data = get_vec_start(v);    //优化方式记录函数的开始位置 利用数组的方式进行访问
    *dest = *IDENT;                    //但是并没有显著提高程序性能原因是什么。
    for(i = 0; i < length; i++){
        *dest = *dest OP data[i];
    }
}//缺点:累计变量的值每次在迭代的时候都会读入和写入内存,这样的读写会很浪费时间,为了消除这种不必要的读写,引入一个临时变量ACC,他在循环中用于计算累加计算出来的值,最后只需要读入和写入内存一次

void Comebine4(vec_ptr v, data_t *dest){
        long i;
        long length = vec_length(v);
        data_t *data = get_vec_start(v);
        data_t acc = IDENT;
    
        for(i = 0; i < length; i++){
           acc = acc OP data[i];
    }
    *dest = acc;
}
        

你可能感兴趣的:(hit-CSAPP-计算机系统,学习)