IT用語集 › プログラミング › SSO(短い文字列の最適化)

SSO(短い文字列の最適化)

プログラミング Svenska → 更新: 2026-10-23

短い文字列をヒープに確保せず、文字列オブジェクトの内部に直接格納する手法。sizeof(std::string)が8ではなく32バイトである理由。

実際のプログラムの文字列の大半は、キー、識別子、ラベル、拡張子など短い。文字列ごとに確保を行うのは大きな無駄である。そのため実装は、一定の長さまで内容をオブジェクト自身のバイト列に置き、それを超えたときだけヒープに切り替える。この長さはlibstdc++で15文字、libc++で22文字だ。利点は、確保回数が減ることと、データがオブジェクトと同じキャッシュラインに載ることである。知っておくべき帰結は三つある。オブジェクトが想像より大きいこと、短い文字列のムーブはポインタの付け替えではなく実際に内容をコピーするため無料ではないこと、短い場合と長い場合の分岐が文字列を多用するコードのプロファイルに現れることだ。いずれも標準が要求するものではない。

← 用語集に戻る