我想知道某种结构是否包含多个基元但其总大小小于或等于单个 cpu 寄存器(如 4 字节寄存器)的大小,它对编译器有意义吗在按值传递或引用函数时将其放入那些 4 字节寄存器之一,而不是在被调用者堆栈上复制它或传递指向它的指针,并且通常在将多个原语传递给传入 cpu 寄存器的数组或结构之类的函数会派上用场吗?
这种结构的例子:
struct sample{
public:
char char1;
char char2;
};
将结构传递给函数的示例:
void someFunc(const sample input){
//whatever
}
void someFunc(sample input){
//whatever
}
void someFunc(sample & input){
//whatever
}
void someFunc(const sample & input){
//whatever
}
最佳答案
这是在您的执行环境的应用程序二进制接口(interface) (ABI) 中定义的。该标准在调用函数时没有说明任何关于处理器寄存器的内容,因此创建一个将小结构打包到单个处理器寄存器中的环境是合法的。
对于引用部分,它们很可能无论如何都作为指针传递,因为在被调用函数内部采用引用地址时,它必须解析为引用对象的地址。
关于c++ - 编译器将 cpu 寄存器中的这种结构传递给函数是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4213107/