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寄存器中,从而无需将指针传递给主存储器?
这不依赖于编译器,也不可能.数组不能以与其他类型相同的方式传递值,即传递给函数时不能复制它们.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和变体).但是,这意味着编译器实际上可以将小数组的内容插入到单个寄存器中,这不能用于更改您引用的函数调用.
归档时间: |
|
查看次数: |
1430 次 |
最近记录: |