2011-03-11 9 views
1

私は文字通りスクリプトのおかげで書かれた巨大な配列を持っています。これは、基本的に配列に変換されたイメージファイルです。constとマクロとメモリの寿命

ボディをマクロとして定義したり、ヘッダのconst型に入れることができます。私がconstとして設定した場合、どのようなメモリの寿命になりますか?それはプログラム全体の最後ですか?それは、関数のように、使用されているスコープと同じ長さですか?マクロを使用するほうがよいでしょうか?

+1

実際のビットマップ自体を含めるとどうなりますか? – reuscam

+1

さて、C/C++コードにビットマップを含めることはできません.-ビットマップをコードに変換する場合(彼がやっていることです) - win32 – nos

+0

リソースファイルを使用している場合はビットマップをリソースファイルとして追加し、ディスクなどから開きます。 – reuscam

答えて

9

Iは、(おそらくそれ自体で)、ソースファイルへの配列の定義を移動したい:

//bitmap.h 
extern char const my_bitmap[]; 

// bitmap.cpp 
char const my_bitmap[] = { 
    0x12, 0x34, 0x56, // lots of data here... 
}; 

は次にだけはそれのためにextern宣言を持つヘッダを書きますこれにより、すべてのコード(ヘッダーを含む)にデータへのアクセスが与えられますが、使用するすべてのデータのコピーが1つしかないことが保証されます。また、データへのアクセスが必要な各ファイルに対して、ビットマップを表すコードを無意識のうちに再コンパイルすることを回避します。

+0

メモリの影響はどうですか?本当に、私は一度だけそれを使用する必要があります。 – NebulaFox

+0

そのメモリを管理することは(主に)OSに依存します。デマンドページ仮想メモリを仮定すると、使用時にページインされ、最近使用されていないときに破棄されます(「最近の」と判断する正確な詳細は異なります)。 –

2

配列がヘッダファイルで定義されている場合、その配列はグローバルスコープを持ち、アプリケーションが持続する限り存続します。

注:このヘッダーを複数回インクルードすると、複数のシンボル/名前が同じシンボルであることを示すリンカーエラーが発生する可能性があります。配列が静的である場合、そのヘッダーを含むすべてのソースファイルにその配列のコピーがあります。

アレイをマクロとして定義した場合、そのマクロを使用する場所に応じて配置され、そのマクロを使用するたびにアレイのコピーが得られます。すべてが配列がかなり小さい単純な場合を除いて。

関連する問題