std::string
はテンプレートクラス(tostd::string
のみ)であるため、使用されたメソッドのみがインスタンス化され、未使用のメソッドがコンパイルされることはなく、実行可能ファイルから削除することはできません。typedef
std::basic_string<char>
非テンプレートクラスについて:virtual
vtableにはアドレスが必要なため、関数は、呼び出されたかどうかに関係なく、常に実行可能ファイルに格納されます。実行可能ライブラリまたは静的にリンクされたライブラリのソースからのその他のメソッド(および無料の関数)は、実際に使用されている場合にのみバイナリにリンクされます。しかし、にリンクされていない関数を出力するためのリンカーフラグがないことを私は知っています。
一方、共有ライブラリ(.so)には、すべての(エクスポートされた)関数とメソッドを含める必要があります。これは、この共有ライブラリを使用するバイナリが任意の(エクスポートされた)関数を使用できるためです。ただし、共有ライブラリは、メモリに1回だけロードされている間、多くの実行可能ファイルで使用できるため、通常、これは価値があります。