這裏是我寫在64位linux機器上的函數。C代碼分析
void myfunc(unsigned char* arr) //array of 8 bytes is passed by reference
{
unsigned long a = 0; //8 bytes
unsigned char* LL = (unsigned char*) &a;
LL[0] = arr[6];
LL[1] = arr[3];
LL[2] = arr[1];
LL[3] = arr[7];
LL[4] = arr[5];
LL[5] = arr[4];
LL[6] = arr[0];
LL[7] = arr[2];
}
現在我的問題是:
- 威爾變量「a」被存儲在一個寄存器,使得它不會被一次又一次地從RAM或chache訪問?
- 在64位體系結構上工作時,我應該假設'arr'數組將被存儲在一個寄存器中,因爲函數參數存儲在一個64位體系結構的寄存器中?
- 指針類型轉換的效率如何?我的猜測是它應該效率低下?
任何幫助將appriciated。
問候
好,所以'a'或'arr'都不會存儲在寄存器中。這個代碼中的緩存命中呢?我能否假設讀寫變量'arr'和'a'產生100%緩存命中? – 2010-10-01 18:31:11
是的,這可能是一個安全的假設 - 我能想到的唯一的事情就是如果你在函數中間切換上下文非常不幸,那麼當控制回到你的過程時,它們可能不會再被緩存了。 – zwol 2010-10-01 18:34:24