如果一個多層次的數據結構達到兩級或者兩級以上,舉例如下:
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%的時間性能提升,但是這個測試函數邏輯功能比較復雜,而且這種多級指針的引用有很多,所以測試結果相對來說比較理想。