GCC と Clang の SSO が気になったので調べました。 SSO(Small-string optimization)とは 通常、std::string は文字列を確保する際、動的にメモリを確保します。 しかし "aaa" とか "hogehoge" とかの小さい文字列でメモリをアロケートするのは勿体無い。 何とかメモリを確保せずに済ませようと頑張って最適化された実装が SSO です。 具体的には、std::string オブジェクトの中に文字列を格納します。 こうすることで、メモリをアロケートせずに文字列を格納できます。 ただし、これは全ての std::string オブジェクトのサイズが増えることになります。 通常、std::basic_string には以下のデータが必要になります。 文字列の実体へのポインタ 利用している文字列のサイズ(size) 確保している領域のキャパシ