首页 > 代码库 > C语言优化实例:消除多级指针的间接访问

C语言优化实例:消除多级指针的间接访问

如果一个多层次的数据结构达到两级或者两级以上,举例如下:
struct A{
     int array_member[100];
     //其他数据成员
};

struct B{
     struct A *a_ptr;
     //其他数据成员
}


那么通过B类型的指针b_ptr访问A类型的array_member的某一个元素array_member[0]则需要使用b_ptr->a_ptr->array_member[0]这种多级指针的形式。如果一个函数中多次用到这个变量的话,可以采用一个临时变量保存这个多级指针:int *array_member_tmp = b_ptr->a_ptr->array_member;之后再需要用的到这个多级指针就可以用这个临时变量来访问了。
如果这个函数中除了这个多级指针以外并没有多少其他需要保留在寄存器中的变量或者值的话,那么这样修改可能并没有提升,这是因为编译器已经帮我们把b_ptr->a_ptr->array_member保存在寄存器中,之后用到这个多级指针时直接从寄存器拿就可以了,而不需要再通过多级指针来访问。
但是如果某一个被频繁调用的函数中存在多个这样的变量或者该多级指针被踢出寄存器的话,那么临时变量的方法将会达到意想不到的结果。在一个实际问题中测试竟可以达到近50%的时间性能提升,但是这个测试函数逻辑功能比较复杂,而且这种多级指针的引用有很多,所以测试结果相对来说比较理想。