我有一行
double A =uJoinFeatures1.Values [i];
这会创建双值
的副本struct udtJoinFeatures
{
double Values[17];
};
但出于速度原因,我只想引用该值而不复制它。 请问我该怎么办?
我试过
double A =&uJoinFeatures1.Values [i];
但这是不可能的。
答案 0 :(得分:3)
您声明A
是对double
:
double& A = ...;
在这种情况下,它确实不会有任何速度增加。在64位机器上,double
和指针(实际上都是引用)都是64位,复制量相同。并且因为引用实际上只是指针的另一个名称,所以当您访问可能添加更多指令的引用而不仅仅使用double
时,您具有间接性。
不管怎样它都不会被测量,除非你在紧密循环中对数百万件物品这样做。
答案 1 :(得分:1)
出于速度原因,尤其是COPY!
间接访问可能比复制几个字节花费更多,特别是因为它使编译器更难将值保存在寄存器中(它必须首先优化引用;引用只能指向内存)。 / p>
无论如何,这绝对是一个不成熟的优化。在确定所有算法都具有最佳复杂性,最小化分配,工作重复和所有其他算法问题之后,您应确保内部循环内联,并且您将发现编译器将尽可能做到最好。无论如何,正常的副本变种。