c++ - 编译器将 cpu 寄存器中的这种结构传递给函数是否有意义?

标签 c++ function compiler-construction parameter-passing cpu-registers

我想知道某种结构是否包含多个基元但其总大小小于或等于单个 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/

相关文章:

c++ - C++/Qt-Creator中方法名的草写是什么意思

c++ - 在 ReSharper C++ 中完成 'XML Doc Comment'

c++ - 样式表的变化

JavaScript 数组和闭包

c - ((double *)0) 在 C 内部做什么

c++ - 将文件/文件名的路径作为参数传递给在 C++ 中将文件打印到屏幕的函数

c++ - 如何从另一个函数访问一个函数中的内容,在 C++ 中从第三个调用

c++ - C++ 中的罗马数字输出总是 "-858993460",不知道为什么?

optimization - 在执行循环之前插入一条语句

javascript - bool 文字和 bool 值有什么区别?