函数调用会增加一些overhead。调用越多对性能的影响越大。
所以要尽量减少在loop中的函数调用。
如:
例子1
1 /* Move call to vec_length out of loop */
2 void combine2(vec_ptr v, data_t *dest)
3 {
4 int i;
5 int length = vec_length(v);
6
7 *dest = IDENT;
8 for (i = 0; i < length; i++) {
9 data_t val;
10 get_vec_element(v, i, &val);
11 *dest = *dest OPER val;
12 }
13 }
例子2
1 data_t *get_vec_start(vec_ptr v)
2 {
3 return v->data;
4 }
1 /* Direct access to vector data */
2 void combine3(vec_ptr v, data_t *dest)
3 {
4 int i;
5 int length = vec_length(v);
6 data_t *data = get_vec_start(v);
7
8 *dest = IDENT;
9 for (i = 0; i < length; i++) {
10 *dest = *dest OPER data[i];
11 }
12 }
这个例子中,假设vec_ptr结构中的data数据一个数组。 那在循环中每次去下一个元素的时候,就可以用数组的操作,而不用函数。
当然这个方法,对数据结构的封装性有所破坏。 只是作为例子,学习一下。