2019年2月27日

[C++] One Simple Trick For Reducing Code Bloat

簡單整理一下這部影片的重點,說明有時候一個小動作會讓 compiler 難以最佳化,然後 code size 就會變大。

其實重點很簡單,現在 C++ 一旦你提供了 destructor,那他就不會幫你自動生出其他的 special member function (Effective Modern C++: Item 17)。因為自動產生的 special member function 都是 trivial,所以 compiler 很容易做最佳化

從他給的例子來說,一個裡面只有一個 int 的 structure,code size (以 clang 來說,影片有 gcc & clang 的對比) 會是 10 行 (沒有 destructor) 跟 13 行 (有 destructor) 的差異;member 是一個 std::string 的話會是 231 行及超過 300 行的差異。

雖然這例子有點極端,不過結論其實滿明確的:你要嘛就都不給,要嘛就遵從 rule of five,把所有 special member function 都給齊全。

沒有留言:

張貼留言