2016-01-23 23 views
1

这是最好用的代码示例问:参数的字节大小是否会影响不透明函数调用的开销?

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

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

假设两种功能的替代品内部执行已编译的二进制(因此不能被内联),有没有在函数调用的开销有区别吗?

回答

2

显然是:

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

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

  • alternative_1你在一个本地副本的情况下:

    的结构操作时也有很大的区别。

  • 修改alternative_2中的结构时,您更改了原始数据。

及其相当类似的功能接收到的整数任一种整数指针。

相关问题