ソース コードには、先頭の空白を除いて同一のリテラル文字列が多数あります (正しいインデントを維持したいため)。コンパイラは、1 つの文字列を数バイトだけオフセットするだけで、メモリ内のスペースを両方に再利用できるほどスマートですか?
3 に答える
1
簡単な答え:おそらく。
長い答え:それは実装に依存します。通常、Cコンパイラには、「文字列プール」などと呼ばれるオプティマイザ機能があります。これにより、コンパイラはすべての文字列リテラルを隣接してROMに格納できます。
次に、その文字列プールの内容を最適化できます。2回表示されるまったく同じ文字列が、ほぼ確実に最適化されます。ほとんどのコンパイラは、サブ文字列を認識するのに十分賢いと思います。ただし、配置などのプラットフォームに関する考慮事項もあるため、サブ文字列が存在するからといって、必ずしもそのメモリ位置を再利用することが最も効果的であるとは限りません。
C標準には、そのような最適化が行われることを保証するものは何もありません。しかし同時に、それを妨げるものは規格にはありません。
確かに、特定のコンパイラのドキュメントを確認するか、プログラムを逆アセンブルするか、リンカの出力を確認する必要があります。
于 2012-11-26T12:28:01.933 に答える
1
ISO c99 6.5.2.5 複合リテラル
83) これにより、実装は文字列リテラルと定数複合リテラルのストレージを同じまたは重複する表現で共有できます。
于 2012-11-26T11:38:26.397 に答える
-4
簡単な答え: いいえ。これを行うコンパイラを知りません。
于 2012-11-26T10:49:07.607 に答える