可能整个数组驻留在一些cpu寄存器中?

Poo*_*ria 3 c++ arrays parameters cpu

因为我不太熟悉cpu寄存器,一般而言,在任何体系结构中都特别使用x86,如果使用VC++编译器相关,我很好奇,数组的所有元素都可能像数组一样具有少量元素1个字节的字符有4个元素驻留在某个cpu寄存器中,因为我知道对于像double,integer等单个基元来说这可能是真的吗?

当我们有如下参数时:

void someFunc(char charArray[4]){
//whatever
}
Run Code Online (Sandbox Code Playgroud)

这个参数传递肯定会通过传递指向函数的指针来完成,或者该数组是否会驻留在某个cpu寄存器中,从而无需将指针传递给主存储器?

Dav*_*eas 5

依赖于编译器,也不可能.数组不能以与其他类型相同的方式传递值,即传递给函数时不能复制它们.C++标准很明确,在声明中处理函数签名时,以下是完全等价的:

void foo( char *a );
void foo( char a[] );
void foo( char a[4] );
void foo( char a[ 100000 ] );
Run Code Online (Sandbox Code Playgroud)

兼容的编译器会将函数签名中的数组转换为指针.现在,在调用的地方,会发生类似的操作:如果参数是一个数组,编译器必须将其衰减为指向第一个元素的指针.同样,阵列的大小在衰变中丢失.

特定寄存器可用于保存多个值并对其执行操作(google用于矢量化操作,MME和变体).但是,这意味着编译器实际上可以将小数组的内容插入到单个寄存器中,这不能用于更改您引用的函数调用.