double A =uJoinFeatures1.Values [i];
這產生了雙重價值
struct udtJoinFeatures
{
double Values[17];
};
但對速度的原因,我只想引用值,而不副本複製它。 請問我該怎麼做?
我試圖
double A =&uJoinFeatures1.Values [i];
但是這是不可能的。
double A =uJoinFeatures1.Values [i];
這產生了雙重價值
struct udtJoinFeatures
{
double Values[17];
};
但對速度的原因,我只想引用值,而不副本複製它。 請問我該怎麼做?
我試圖
double A =&uJoinFeatures1.Values [i];
但是這是不可能的。
您聲明A
作爲對double
參考:
double& A = ...;
在這種情況下,雖然,它真的是不會被任何速度增加。在64位機器上,double
和一個指針(它們實際上都是)都是64位,與複製的數量相同。而且由於引用實際上只是指針的另一個名稱,所以在訪問引用時可能會有間接性,這可能會增加更多指令,而不僅僅是使用double
。
不管它是否可以測量,除非您在緊密循環中爲數百萬項目執行此操作。
特別是速度的原因,一定要複製!
間接訪問可能比複製幾個字節花費更多,尤其是因爲它使編譯器難以將值保存在寄存器中(它必須首先優化引用;引用只能指向內存)。
無論如何這絕對是一個不成熟的優化。確保所有算法具有最佳複雜性,最小化分配,工作重複和所有其他算法問題後,應確保內部循環已內聯,並且您會發現編譯器將盡最大努力正常的拷貝變種。
'double&A = uJoinFeatures1.Values [i];' – Aneri
複製'double'應該像複製'double *'一樣快,並且可能允許更快的訪問。 –
@BenjaminBannier,但你不能用它來分配一個值。 – Aneri