-1
我有一個需要訪問結構的幾個字段的代碼的高性能關鍵部分。將結構本身分配給變量還是使用指針獲取結構成員(例如,結構成員訪問的性能
struct A* = A_arr + n;
int a = A->t - A->s;
與
struct A = A_arr[n];
int a = A.t - A.s;
感謝您的幫助!
我有一個需要訪問結構的幾個字段的代碼的高性能關鍵部分。將結構本身分配給變量還是使用指針獲取結構成員(例如,結構成員訪問的性能
struct A* = A_arr + n;
int a = A->t - A->s;
與
struct A = A_arr[n];
int a = A.t - A.s;
感謝您的幫助!
它們很可能是相同的。如果編譯器生成的代碼對於一個版本的行爲顯着較慢,那麼這是一個糟糕的編譯器。
理想情況下,你會自己測量這個來找出答案。理論上講,一個好的編譯器會爲兩者創建相同的程序集。
第二個版本更自然,所以更具可讀性,所以我寧願直到它被測量並發現不太理想。
如果您有高性能關鍵代碼部分,您必須對代碼進行配置以達到該點。爲什麼你不能再簡介來測試呢? – Pubby
答案可能取決於幾個細節 - 比如你訪問結構成員的次數,以及編譯器是否可以推斷出沒有可能的指針別名。 –
研究編譯器生成的彙編器。對於gcc,例如,這是選項'-S'而不是'-c'。 –