看板 C_and_CPP 關於我們 聯絡資訊
如果是基本型別 那麼我在搬資料的時候就可以用memcpy 但是若是自訂類別 那麼就只能用loop和operator 我知道可以特化某些型別 但是這樣就要手動寫出很多額外的template出來 所以想請教板上先進 有沒有可以在template判斷是否能用memcpy的方法 或者在compile time就已知loop次數的情況下 compiler會幫我最佳化 所以其實我不需要去管這個? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.251.45 ※ 編輯: iamstudent 來自: 140.113.251.45 (09/24 12:37)
tropical72:單純要判斷 POD: http://codepad.org/lLUia8Wy 09/24 13:13
tropical72:可再優化,可能會有更好作法,但compile opt.不會把 loop 09/24 13:15
tropical72:assign 換成 memcpy. 09/24 13:15
tropical72:對了,incldue algorithm 裡的 copy/fill 應都有優化過. 09/24 13:24
iamstudent:感謝回覆,typeid的作法似乎會多出run time比較 09/24 13:24
iamstudent:我想知道的是能不能compile time就決定 09/24 13:24
iamstudent:另外,最佳化會把短loop展開嗎? 09/24 13:25
tropical72:不會展開,這也是數值分析src求速度要把loop全都roll開 09/24 13:30
loveme00835:std::copy 對內建型別通常會採較低階/快速的複製動作 09/24 13:35
tropical72:@loveme00835:所以copy對POD「有可能」偷做 memcpy 嗎? 09/24 13:36
loveme00835:但不是必然 09/24 13:36
loveme00835:@tropical72: yes 09/24 13:40
loveme00835:STL algorithms不只是一些C語言函式的替代方案,我覺 09/24 13:42
loveme00835:得他也讓讀者用更高階方式思考,及提供正交性可讀性, 09/24 13:44
loveme00835:同樣一個for, tells nothing 09/24 13:45
tropical72:謝謝lovme00835不吝指導 *^_^* 09/24 13:45
iamstudent:我自己找到答案了,c++ templates The Complete Guide 09/24 14:31
iamstudent:19.1有可以確定是否為基本type的辦法 09/24 14:32
iamstudent:還是會增加額外的run time比較,但是比起t大的typeid 09/24 14:33
iamstudent:可以只比較一次 09/24 14:34
tomap41017:樓上那本書裡面就有解答了! 09/24 16:19
tomap41017:C++ algorithm真的蠻建議讀侯捷的STL源碼剖析 09/24 16:20
tomap41017:std::copy幫你處理了很多事,看完你會發現C++很威 09/24 16:20
avhacker:哪要那麼麻煩,早就有現成工具了 09/24 16:23
avhacker:http://goo.gl/Axttd 09/24 16:23
priv:現代的compiler很猛,迴圈如果只操作POD會展開很正常 09/24 16:24
priv:不過如果中間通過一些比較複雜的運算就不一定了 09/24 16:24
iamstudent:The Complete Guide這本書真的很棒 09/24 16:46
iamstudent:metaprogramming展開迴圈、ifelse都可以辦到 09/24 16:48