参数的字节大小会影响不透明函数调用的开销吗?
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 中的结构时,您更改了原始数据。
它非常类似于接收 整数 或 指向整数 的指针的函数。
最好用代码示例来询问:
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 中的结构时,您更改了原始数据。
它非常类似于接收 整数 或 指向整数 的指针的函数。