2012-11-17 80 views
-1

我有一個需要訪問結構的幾個字段的代碼的高性能關鍵部分。將結構本身分配給變量還是使用指針獲取結構成員(例如,結構成員訪問的性能

struct A* = A_arr + n; 
int a = A->t - A->s; 

struct A = A_arr[n]; 
int a = A.t - A.s; 

感謝您的幫助!

+5

如果您有高性能關鍵代碼部分,您必須對代碼進行配置以達到該點。爲什麼你不能再簡介來測試呢? – Pubby

+1

答案可能取決於幾個細節 - 比如你訪問結構成員的次數,以及編譯器是否可以推斷出沒有可能的指針別名。 –

+0

研究編譯器生成的彙編器。對於gcc,例如,這是選項'-S'而不是'-c'。 –

回答

2

它們很可能是相同的。如果編譯器生成的代碼對於一個版本的行爲顯着較慢,那麼這是一個糟糕的編譯器。

4

理想情況下,你會自己測量這個來找出答案。理論上講,一個好的編譯器會爲兩者創建相同的程序集。

第二個版本更自然,所以更具可讀性,所以我寧願直到它被測量並發現不太理想。