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

时间:2016-01-23 20:05:57

标签: c performance struct function-calls

最好用代码示例询问:

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

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

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

1 个答案:

答案 0 :(得分:2)

显然是的:

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

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

在结构上运行时也有很大的不同:

  • 如果是 alternative_1 ,则使用本地副本。
  • alternative_2 中修改结构时,您需要更改原始数据。

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