Re: [問題] 關於優化的書籍

看板C_and_CPP (C/C++)作者 (Ar藤)時間14年前 (2011/11/20 02:22), 編輯推噓0(0013)
留言13則, 3人參與, 最新討論串2/2 (看更多)
小弟用valgrind之中的callgrind去測最佔時間的函數 發現 tinfo.cc:__dynamic_cast 居然佔了第三高 程式裡面確實有很多dynamic_cast 如果我有用到dynamic_cast的地方都確定一定要是cast成該型態 是否可以改成 static_cast 加上一個accert做檢查? (base class 有個成員有存class type的型態) 我不清楚dynamic_cast的用法 它多了一個檢查 但什麼時候會需要去執行到 轉失敗的流程 這是一個什麼樣的架構? 另外 valgrind的memcheck功能太強了 如果我只想知道我的程式從開啟到結束 所佔memory的最大值(peak)是多少 是否有比較推薦的工具呢? 感謝! ※ 引述《Arton0306 (Ar藤)》之銘言: : 小弟目前需要加速某段程式的執行速度 : 此段程式所採用的演算法為O(n) 但n大到10^8左右 : 目前也沒有更快的演算法( 其實是在作BFS或DFS的變形 n=Node+Edge ) : 所以如果要更快 似乎只能從程式碼優化下手 : 例如找出哪邊可以少做一次運算 : 或是怎麼寫才可以減少cache miss..等等 : 想問有沒有這一類的書籍或資料呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.140.149

11/20 02:32, , 1F
我也非常好奇dynamic_cast的內部實作...
11/20 02:32, 1F

11/20 02:47, , 2F
其實就是靠檢查virtual function table 來判斷, 所以沒
11/20 02:47, 2F

11/20 02:48, , 3F
virtual function 的話其實就直接static cast
11/20 02:48, 3F

11/20 02:49, , 4F
另外你也可以分享一下你為何需要dynamic_cast
11/20 02:49, 4F

11/20 02:49, , 5F
有些時候可以透過其他方式去處裡掉
11/20 02:49, 5F

11/20 02:51, , 6F
如果真的需要又嫌太貴的話 那就去研究一下llvm 的dyn_cast
11/20 02:51, 6F


11/20 02:58, , 8F
小弟維護一份code 他原本就這樣寫 我可能會改掉
11/20 02:58, 8F

11/20 02:59, , 9F
看了很多書還是不懂什麼情況是「必須」使用dynamic_cast
11/20 02:59, 9F

11/20 03:00, , 10F
llvm 以我弱弱的功力沒辦法看懂 冏...
11/20 03:00, 10F

11/20 03:01, , 11F
來自多重繼承的傢伙
11/20 03:01, 11F

11/20 14:03, , 12F
#1Dn4ACH1 我發現板大有一個例子 而且還是我問的 竟忘了
11/20 14:03, 12F

11/21 18:05, , 13F
oh peak那個我耍笨了 top就好了 歹勢…
11/21 18:05, 13F
文章代碼(AID): #1En_FJyB (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1En_FJyB (C_and_CPP)