[問題] 請問一下有關deque的位置傳遞速率

看板C_and_CPP作者 (ㄚ魚!!)時間14年前 (2011/11/03 17:00), 編輯推噓0(0013)
留言13則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): 目前的方案整合,包含5個專案 其中一個專案專門負責render 3DDisplay 另一個專案進行三角網格運算 TriCaculate 目前用deque<Tri>紀錄網格資料並pass到 3DDisplay 照理來說應該已經直接將位址指過去,並非一個個COPY數值push進去, 但仍然比想像中的慢 60萬tri網格需31ms 130萬網格需67ms 似乎是線性遞增 請問是否這是deque的先天限制? 還是在下理解錯誤? 請問能有更快的傳遞方式嗎? 程式碼(Code):(請善用置底文網頁, 記得排版) DisplayLib::GetTri(deque<Tri> &tri) { .... 3DDisplay *p3D = (3DDisplay*) pWnd; p3D->tri = tri; //光是這行就相當耗時 .... } 補充說明(Supplement): 目前打算要做即時彩現,一秒30frame的話,一個frame就只有33ms可以用 光是傳遞網格資料就超出了>< 還請版友幫忙解惑一下 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.112.106

11/03 17:04, , 1F
Tri多大?
11/03 17:04, 1F

11/03 17:04, , 2F
那行並不是傳位置 而是整個copy
11/03 17:04, 2F

11/03 17:04, , 3F
p3D->tri 這個是什麼 type ?
11/03 17:04, 3F

11/03 17:12, , 4F
除非3DDisplay::tri是個自訂的class並且重載等號 使之
11/03 17:12, 4F

11/03 17:12, , 5F
只會抓tri的位址....不過我想應該不是這樣吧
11/03 17:12, 5F

11/03 17:16, , 6F
Tri 60萬 -> 3X ms 130萬 -> 6X ms
11/03 17:16, 6F

11/03 17:22, , 7F
3DDisplay內也有一個 deque <Tri> tri;
11/03 17:22, 7F

11/03 17:26, , 8F
我以為這樣寫是call by Reference ><||
11/03 17:26, 8F

11/03 17:37, , 9F
傳參數的時候是call by reference沒錯, 但是=的時候不是
11/03 17:37, 9F

11/03 17:39, , 10F
你把 3DDisplay 裡寫成 deque <Tri> *tri;
11/03 17:39, 10F

11/03 17:39, , 11F
複製那行改成 p3D->tri = &tri; 就行了
11/03 17:39, 11F

11/03 21:29, , 12F
如果傳過去不會動到資料就加上const比較好
11/03 21:29, 12F

11/04 10:56, , 13F
成功了 謝謝各位m(o)m
11/04 10:56, 13F
文章代碼(AID): #1EibWupJ (C_and_CPP)