看板 C_and_CPP 關於我們 聯絡資訊
小弟用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
james732:我也非常好奇dynamic_cast的內部實作... 11/20 02:32
akasan:其實就是靠檢查virtual function table 來判斷, 所以沒 11/20 02:47
akasan:virtual function 的話其實就直接static cast 11/20 02:48
akasan:另外你也可以分享一下你為何需要dynamic_cast 11/20 02:49
akasan:有些時候可以透過其他方式去處裡掉 11/20 02:49
akasan:如果真的需要又嫌太貴的話 那就去研究一下llvm 的dyn_cast 11/20 02:51
Arton0306:小弟維護一份code 他原本就這樣寫 我可能會改掉 11/20 02:58
james732:看了很多書還是不懂什麼情況是「必須」使用dynamic_cast 11/20 02:59
Arton0306:llvm 以我弱弱的功力沒辦法看懂 冏... 11/20 03:00
akasan:來自多重繼承的傢伙 11/20 03:01
Arton0306:#1Dn4ACH1 我發現板大有一個例子 而且還是我問的 竟忘了 11/20 14:03
Arton0306:oh peak那個我耍笨了 top就好了 歹勢… 11/21 18:05