【发布时间】:2009-05-13 14:47:34
【问题描述】:
经验法则是通过值传递小的结构是可以的,而较大的应该做指针。
我的问题是这个分界点到底在哪里?在你最好通过指针传递它们之前,结构可以有多大。
我知道这会因平台而异,但我认为可以给出一些粗略的估计。一两年前,我试图在 PPC 架构上弄清楚这一点,令我惊讶的是,一个人可以通过价值有效地传递大量数据。由于 PPC 中有大量寄存器,因此认为 10 个双精度值左右就可以了。通过指针实际上涉及更多的内存复制。
但是我现在在英特尔上,我希望事情可能会有所不同。由于传统上 CPU 没有那么多寄存器,但在 64 位或浮点寄存器上可能会有所不同?
【问题讨论】:
-
这取决于....你需要基准测试...
-
Mitch 是正确的,唯一知道的方法是进行基准测试。您的答案会因您测试的平台而异。
-
我想我的问题是我不知道如何正确地对它进行基准测试。我担心一个简单的例子太容易被编译器优化,而不能反映实际使用情况。进行过早的优化可能看起来很愚蠢,但这是我一直在努力争取良好性能的事情,所以我不想做出不必要的愚蠢选择。它会影响我的整个 API 设计,所以我不想在以后更改所有这些。
标签: c performance optimization struct pointers