3

多くの文字列解析を行う C++ アプリケーションを作成しています。文字列定義を通常のヘッダー ファイルに保持します (対応する C++ ファイルはありません)。

ヘッダー ファイルは #ifdef XXX を使用して、コンパイラによって 1 回だけ処理されるようにします。

文字列を宣言するオプションがあります

const TCHAR m_szRoot[] = _T("root");

また

static const TCHAR m_szRoot[] = _T("root");

これらの変数は、アプリケーションで何度も使用されます。

おすすめの宣言は?また、アプリケーション サイズの観点から、どちらの宣言が優れているかを示します。

4

2 に答える 2

3

複数の変換ユニットに含まれるヘッダーから同じものを作成するとstatic、結果の各ファイルはオブジェクトの独自のコピーを取得し、アプリケーションのフットプリントを増やす可能性があります。さらに、オブジェクトは異なるアドレスに存在するため、同等性の比較が遅くなる可能性があります。リンク時の最適化では、同一の定数を組み合わせることができますが、それはオプションです。

重複を回避する特定の方法は、定数を別の変換ユニット(つまり、CPPファイル)に配置externし、ヘッダーファイルで使用することです。

ヘッダ:

extern const TCHAR m_szRoot[];

constants.cpp:

const TCHAR m_szRoot[] = _T("root");

これにより、定数ごとに1つの定義が保証されます。

于 2013-03-23T10:49:08.750 に答える
2

マイクロ最適化は忘れてください!!

static変数のスコープを単一の翻訳単位に制限する場合に使用します。
static内部リンケージを提供します。それは最適化ではなく、
それを宣言する基準であるべきです。staticコンパイラは、必要な最適化をすべて実行します。

于 2013-03-23T10:47:32.583 に答える