我试图了解在 C++/Linux/x86-64 平台中按值传递对象作为函数参数的开销。
我用于探索的实验代码发布在下面和 Godbolt.org 上:https ://godbolt.org/z/r9Yfv4
假设函数是一元的。我观察到的是:
我只考虑整型和指针以及这些基本类型的组合类型。我知道传递浮动/双打是不同的。
的大小std::function为 32 字节(GCC/Linux 实现,long + long + 指针 + 指针 = 32 字节。)。所以std::function按值传递应该看起来像struct Person4在我的代码中定义的传递。但是输出程序集显示 passstd::function与 pass 非常不同struct Person3。看起来 std::function 是通过指针传递的,对吗?为什么会有这样的差异?
#include <functional>
struct Person0 {
long name;
};
long GetName(Person0 p) {
return p.name;
}
struct Person1 {
long name;
long age;
};
long GetName(Person1 …Run Code Online (Sandbox Code Playgroud)