Optimizing Program Performance--Reucing Procedure Calls

来源:互联网 发布:apache与php的关系 编辑:程序博客网 时间:2024/05/16 09:24

函数调用会增加一些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数据一个数组。 那在循环中每次去下一个元素的时候,就可以用数组的操作,而不用函数。

 

当然这个方法,对数据结构的封装性有所破坏。 只是作为例子,学习一下。

原创粉丝点击