Eri*_*eim 9 c optimization performance struct pointers
经验法则是按值传递小结构是可以的,而较大的结构应该是指针.
我的问题是这个截止点究竟在哪里?在你最好通过指针传递之前,结构有多大.
我知道这会因平台而异,但我假设可以给出一些粗略的估计.一两年前,我试图在PPC架构上弄清楚这一点,并且令我惊讶的是,人们可以通过价值有效地传递大量数据.由于PPC中存在大量寄存器,因此认为10个左右的值很合适.指针实际上涉及更多的内存复制和内存复制.
但是我现在我在英特尔,我希望事情可能会有所不同.由于CPU传统上没有那么多寄存器,但在64位或浮点寄存器上可能有所不同?
好的,所以我尝试遵循建议并使用指针和值来分析我的代码。我还查看了汇编代码。看起来 x86 上的性能特征与 PPC 有很大不同。在 PPC 上,C 的二进制接口指定参数将被放入寄存器中(有很多可供选择的寄存器),但是似乎即使在 64 位 x86 上也需要将参数放入堆栈中。
这就解释了为什么在 x86 上通过指针传递似乎总是更快。然而我注意到编译器非常渴望内联。所以我以哪种方式做到这一点并不重要。所以我想结论是使用任何对你来说方便的传递方式。
我认为这有利于按值传递,因为处理值的副本更安全。我的测试用例是一个由 4 个双精度数组成的结构(所以我猜这使得它在大多数平台上为 32 个字节)。
| 归档时间: |
|
| 查看次数: |
1957 次 |
| 最近记录: |