当一个C函数需要返回多个值时,有几种方法可以实现。
目前我对其中两种方法的相对效率感兴趣:
a) 将这些值捆绑在一个结构体foo中。填充一个本地的foo,并返回它。
b) 传递指针以便填充。
(我正在处理一些混合了这两种方法的遗留代码。)
对于本文的目的:
不同的方法是否会影响编译器进行内联的能力?
如果没有内联,这两种方法之间是否会有性能差异?
指向返回值的指针参数在函数参数中的位置是否会产生影响?无论是对编译器的内联能力还是对非内联性能是否有影响?
编辑了(a)以提高清晰度。
目前我对其中两种方法的相对效率感兴趣:
a) 将这些值捆绑在一个结构体foo中。填充一个本地的foo,并返回它。
b) 传递指针以便填充。
(我正在处理一些混合了这两种方法的遗留代码。)
对于本文的目的:
- 所有返回的值都是基本类型。整数、指针值等。因此sizeof(foo)非常小。
- 使结构体foo不透明并不是一个问题。
- 所讨论的函数最多有12个参数,包括任何指向返回值的指针参数。
- 假设使用较新的编译器,例如gcc 11或更高版本。
不同的方法是否会影响编译器进行内联的能力?
如果没有内联,这两种方法之间是否会有性能差异?
指向返回值的指针参数在函数参数中的位置是否会产生影响?无论是对编译器的内联能力还是对非内联性能是否有影响?
编辑了(a)以提高清晰度。
b)
中,只传递了8个字节,并且没有进行任何复制操作。 - David C. Rankin