如果我有
struct Foo
{
int A;
int B;
};
哪种方法调用更快?
void Bar(Foo MyFoo)
或
void Bar(int A, int B)
或者它们是一样的吗?
答案 0 :(得分:6)
这实际上可能与平台和编译器有关。特别是当sizeof(Foo)很小时。
如果整数是16位,则只需要一个32位的堆栈推送,这比64位架构上的指针小,但是这些整数通常超过16位。
作为单独的参数,每个参数都是一个单独的推送到堆栈,除非编译器做一些聪明的事情,......它经常这样做。在大多数现代平台上,这个结构可能只是一次推送到堆栈。
当你进入更小的有趣结构时,例如包含单个字符或位字段,传递结构可以更快,即使按值传递也是如此。
但这些是微不足道的差异,除非你在一个更接近旧计算器的平台而不是廉价的现代手机上工作。
与其他人一起休息;通过引用传递通常是最快的,但测量或检查生成的组件是确保手头平台的唯一方法。
旁注:如果你进入C ++领域,事情可能会变得更复杂,但是你应该把结构作为const引用传递,这基本上是一个指针,但是让计算机更有机会变得聪明。
答案 1 :(得分:1)
在这种情况下,它们是相同的。
您在功能中传递的参数越多,通话费用就越高。这是因为每次调用都会在堆栈上多次推送。传递完整结构与传递结构的每个单独部分相同。在这种情况下,您应该使用指针和引用。
如保罗所述,请使用void Bar(Foo* MyFoo)
答案 2 :(得分:-2)
花费内存地址(通过引用)比花费值(按值)更好。