[讀書筆記]Universal References in C++11 part 7: Small String Optimize(SSO) 與 move
什麼是SSO?用了這麼久的C++,還是第一次聽到這個名詞。其實,這個是標準庫對std::string所進行的一種優化:對於長度小的字串使用預先分配的stack storage(通常是16 Byte),長字串就根據長度動態的new出free storage。──我們知道,stack storage的速度比free storage還要快出許多。 上一篇我們有談到,若是一個類別裡面沒有使用到free storage的話,那麼其實move就等同於從一個stack storage複制到另一個stack storage。當std::string滿足SSO啟動條件的時候,就是一個典型的例子。但其實我們並不需要擔心太多這個優化問題,因為這邊的成本小到我們可以忽視掉。 不過,多知道一些東西說不定什麼時候能夠派上用場,因此還是讓我們來看看這個優化的細節到底是怎麼進行的吧! 首先,建議先閱讀下面二篇文章: http://stackoverflow.com/questions/10315041/meaning-of-acronym-sso-in-the-context-of-stdstring https://akrzemi1.wordpress.com/2014/04/14/common-optimizations/ 本篇文章接下來將會探討VC++的std::string的實作。 首先,先讓我們看看VC++裡面的SSO的宣告: enum { // length of internal buffer, [1, 16] _BUF_SIZE = 16 / sizeof(value_type) < 1 ? 1 : 16 / sizeof(value_type) }; … Continued