C語言優化例項 消除多級指標的間接訪問

2022-10-10 16:39:11 字數 600 閱讀 7539

如果乙個多層次的資料結構達到兩級或者兩級以上,舉例如下:

struct a;

struct b

那麼通過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%的時間效能提公升,但是這個測試函式邏輯功能比較複雜,而且這種多級指標的引用有很多,所以測試結果相對來說比較理想。

C語言 多級指標 解引用

1.解引用 int main int a 10 int b 20 printf d d n a,b 10 20 int p a p裡儲存a的位址 p 100 對p解引用,將p指向的位址的內容賦為100 p b p指向b p 200 將p指向的位址的內容賦為200 printf d d n a,b 1...

C語言之多級指標

指標用途 1 使程式簡潔 緊湊 高效 2 記憶體的動態分配 3 記憶體位址的直接處理 4 函式呼叫時批量引數的傳遞 5 複雜資料結構的簡潔表達等許多其它資料型別難以實現的複雜操作 等等 一 多級指標 1 為什麼需要使用二級指標 使用二級指標是為了函式呼叫結束可以使作為函式實參的指標的值的改變保留下來...

C語言學習筆記 指標 多級指標

指標的指標 如果乙個指標變數存放的是另乙個指標變數的位址,則稱這個指標變數為指向指標的指標變數。假如定義了乙個二級指標 int q 對於上述例子的二級指標,我們可以把int q拆分成兩部分看 即int 和 q 後面 q 中的 表示 q 是乙個指標變數,前面的int 表示指標變數 q 只能存放int ...