[討論] 如果把省去所有函數呼叫的開銷會快多少?
以 (SGI) C++ STL std::list 的例子來說:
因為涉及很多對資料結構低階的操作,所以實作上勢必有很多內部函數的呼叫,
像是 protected: void transfer(...); 就是一個明顯的例子,被反覆呼叫很多次。
假使不在乎編譯出來的執行檔膨脹的問題的話,把執行的速度作為最高的原則,
那大家覺得如果把所有函式 inline ,能快上多少?快很多?還是一點點而已?
畢竟很多時候效能的瓶頸就卡在那個最底層的東西上面。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.66.155
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1475139910.A.DE0.html
→
09/29 17:17, , 1F
09/29 17:17, 1F
→
09/29 17:19, , 2F
09/29 17:19, 2F
→
09/29 17:20, , 3F
09/29 17:20, 3F
→
09/29 17:20, , 4F
09/29 17:20, 4F
→
09/29 17:22, , 5F
09/29 17:22, 5F
→
09/29 17:22, , 6F
09/29 17:22, 6F
→
09/29 17:24, , 7F
09/29 17:24, 7F
→
09/29 17:24, , 8F
09/29 17:24, 8F
→
09/29 17:28, , 9F
09/29 17:28, 9F
→
09/29 17:28, , 10F
09/29 17:28, 10F
→
09/29 17:29, , 11F
09/29 17:29, 11F
→
09/29 17:37, , 12F
09/29 17:37, 12F
推
09/29 17:59, , 13F
09/29 17:59, 13F
void _M_transfer(_List_node_base* const __first, _List_node_base* const __last)
throw () __attribute__((always_inline));
剛剛把呼叫最多次的 _M_transfer 加上 compiler hint 一點效能改變都沒有
然後為了確定改的是正確的地方 偷偷把 attribute 拼錯 果然編譯失敗 XDDD
http://imgur.com/1OVjug5

我猜編譯器應該已經預設 inline 了吧(?
※ 編輯: Hazukashiine (140.113.66.155), 09/29/2016 18:13:42
→
09/29 18:31, , 14F
09/29 18:31, 14F
→
09/29 18:32, , 15F
09/29 18:32, 15F
推
09/29 22:23, , 16F
09/29 22:23, 16F
→
09/30 10:11, , 17F
09/30 10:11, 17F
推
09/30 10:21, , 18F
09/30 10:21, 18F
→
09/30 10:26, , 19F
09/30 10:26, 19F
→
09/30 21:58, , 20F
09/30 21:58, 20F