这里是我写在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