这部分的代码出自《深入理解计算机系统》(CS:APP)第五章,其目的是通过手工改变代码结构,而不是算法效率和数据结构优化,提高执行效率。有些编译器在某些优化选项下可能会做出类似的改动。

  为了便于以后的查阅和使用,本文进行了摘录和简要分析,其中包含了一些个人理解。对于更深层次的原理如汇编、处理器结构等请参考原书。

  大致地,越靠后的代码性能越好,版本6和7性能近似,版本6略好一些。二者均能达到版本1性能的10倍左右。

  示例演示对于一个向量的所有元素完成一个运算。这个运算可以是所有元素的累加

#define IDENT 0
#define OP +

  或这所有元素的累计乘积 

#define IDENT 1
#define OP *

 

  data_t代表一种数据类型,在这个示例中可以是int、float、double

typedef struct {
    long int len;
    data_t *data;
} vec_rec, *vec_ptr;

   对于vec_rec,有以下操作

创建向量

vec_ptr new_vec(long int len)
{
    /* Allocate header structure */
    vec_ptr result = (vec_ptr) malloc(sizeof(vec_rec));
    if (!result)
        return NULL; /* Couldn’t allocate storage */
    result->len = len;
    /* Allocate array */
    if (len > 0) {
        data_t *data = (data_t *)calloc(len, sizeof(data_t));
        if (!data) {
            free((void *) result);
            return NULL; /* Couldn’t allocate storage */
        }
        result->data = data;
    }
    else
        result->data = NULL;
    return result;
}
vec_ptr new_vec(long int len)

分类:

技术点:

相关文章: