作者Arton0306 (Ar藤)
看板C_and_CPP
標題Re: [問題] 關於優化的書籍
時間Sun Nov 20 02:22:08 2011
小弟用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