
El 10/10/2011 10:47, Thorsten Ottosen escribió:
After running this, I had a great overview over which functions took up most of the time, and which functions that were called a lot (say, many million times). Usually, the compiler will not inline a large function because the saved time is neglible and more code is generated. However, the compiler can usually not know that a large function often returns quickly where large parts of the code of the function is only used sometimes.
Sometimes is useful to split the function into two functions, one with the fast path and another with a call to a non-inlineable functions: void push_back(const T &t) //<- inlineable { if(m_capacity > m_size){ new (m_buffer+m_size) T(t); ++m_size; } else{ expand_and_insert_back(t); //<- non-inlineable big function } } Of course this does not guarantee push_back will be inlined... so I'd apply BOOST_FORCE_INLINE to push_back ;-)