参数的字节大小会影响不透明函数调用的开销吗?

Does the byte size of an argument affect the overhead of an opaque function call?

最好用代码示例来询问:

typedef struct {
    ... // Fields take up many bytes (>= 32 bytes)
} some_struct;

void alternative_1(some_struct arg);
void alternative_2(const some_struct *arg);

假设两个函数替代方案都是在已编译的二进制文件中实现的(因此不能内联),函数调用开销是否存在差异?

显然是:

当调用alternative_1时,整个结构数据在分支到函数之前被压入堆栈(可能很多)。

alternative_2 只有一个指向压入堆栈的结构的指针。

对struct进行操作时也有很大区别:

  • alternative_1 的情况下,您在本地副本上工作。
  • 修改 alternative_2 中的结构时,您更改了原始数据。

它非常类似于接收 整数 指向整数 的指针的函数。