7

私のコードには、次のものがありますstruct

struct foo {
 int a;
 int b;
};

ではb、0〜100の値のみが格納されます。したがって、一般的には、で置き換えることができcharます。structただし、パディング効果により、のサイズは同じです。私のコードには数百万のエントリを持つこれらの構造が含まれてvectorsいるsetsため、何らかの方法でパディングを回避できれば、メモリ使用量が3分の1以上減少します。これを行う可能性はありますか?たとえば、同じように動作する他の(ブースト)データコンテナはありますか?

編集:LinuxシステムではGNUとIntelコンパイラの両方を使用しています。

4

2 に答える 2

7

コミュニティがアドバイスしたように、私のコメントを答えとして移動します:)

これはコンパイラに依存します。必要なのはstruct packingを使用することです。

Visual Studioの場合は必要#pragma packでありgcc、の場合は属性を使用する必要がありますpacked

詳細については、C++構造体アライメントの質問を参照してください。

お役に立てば幸いです。申し訳ありませんが、現時点では実際にテストすることはできませんが、それが必要です。

于 2012-11-01T14:38:43.693 に答える
3

特別な#pragmas を使用して構造のパディング/アライメントを制御する以外に、それらを分割aしてbの s に格納し、インデックスで「一致」させることができます。 vector

sets については、構造をその構成要素に簡単に分割できたとしても (純粋に論理的な観点からはおそらく不可能です - ssetにはインデックスがありません)、動的メモリ管理の調整にお金を払うことになります。それによって得た可能性のある利点をすべて消去します。

于 2012-11-01T14:32:59.820 に答える