2012-10-12 23 views
0

我測試過這個,通過引用傳遞的速度是直接抓取成員的兩倍。例如。 -通過引用返回std :: Vector <>很慢?

class Mesh { 

    public: 
     inline std::vector<Vector3>& GetVertices() { return m_vertices; } 

    private: 
     std::vector<Vector3> m_vertices; 
}; 

如果我經常調用GetVertices()每幀來獲取vert,它比直接訪問m_vertices慢得多。但是我想保持m_vertices的私密性。我能做什麼?

爲什麼它變慢?

+1

請問您能給出測試代碼嗎? – RiaD

+3

你正在編譯優化嗎?該功能應該內聯,這將使其速度一樣快。 –

+1

調用GetVertices()的代碼是否將其捕獲到新值中?如果是這樣,你正在複製一份,所以通過引用返回對你沒有幫助。 – ildjarn

回答

3

編譯器將內聯代碼,並將其改造成一個直接訪問成員(在其他比任何優化級別:我想運行緩慢

+0

優化處於關閉狀態,因爲它在調試模式下運行。內聯功能擴展是:默認。在調試中使用此設置通常是否需要更改? – user1043761

+0

@ user1043761:好吧,如果你打開它們,你可能會讓你的調試器在你的代碼中跳躍而奇怪。但請注意,某些優化級別對於C++性能非常重要,因此您無法將優化關閉時的代碼性能作爲真實的性能指標。 – Omnifarious

+0

所以有可能在調試模式下內聯函數沒有內聯? – user1043761

0

是否有任何虛函數,你」不顯示?也許Mesh是一個子類,GetVertices()是通過基類調用的純虛函數?這會使事情稍微放緩。

另一種可能性是返回一個const引用,而不是非const引用(如果可以的話)。

+0

它不是一個虛函數,並且返回一個const引用不會改變速度。 – user1043761

相關問題