0

我有线

double A =uJoinFeatures1.Values [i];

这将创建双精度值的副本

struct udtJoinFeatures
{
    double Values[17];
};

但出于速度原因,我只想引用该值而不复制它。请问我该怎么做?

我试过了

double A =&uJoinFeatures1.Values [i];

但那是不可能的。

4

2 回答 2

3

您声明A为对 a 的引用double

double& A = ...;

不过,在这种情况下,它实际上不会有任何速度增加。在 64 位机器上, adouble和指针(实际上是引用)都是 64 位,复制的数量相同。并且因为引用实际上只是指针的另一个名称,所以当您访问引用时您具有间接性,这可能会添加更多指令而不是仅使用double.

并不是说它无论如何都是可测量的,除非你在一个紧密的循环中对数百万个项目执行此操作。

于 2013-09-24T10:47:56.173 回答
1

特别是出于速度原因,请务必复制!

间接访问可能比复制几个字节花费更多,特别是因为它使编译器更难将值保存在寄存器中(它必须首先优化引用;引用只能指向内存)。

无论如何,这绝对是一个过早的优化。在确保所有算法都具有最佳复杂性、最小化分配、工作重复和所有其他算法问题之后,您应该确保内循环是内联的,然后您会发现编译器会用无论如何,普通副本变体。

于 2013-09-24T11:01:12.223 回答