私はデータなしでクラスがあるとします。サイズ
struct Empty {
/*some methods here*/
};
そして派生クラスの空のクラスの
struct Derived: Empty {
int a;
int b;
char c;
....
}__attribute__((packed));`
オブジェクトは、サイズ、派生クラスの= 1.空の部分を持っています通常、サイズは0です。コンパイラが理解するように、ベースのEmptyクラスにはデータがないので、Emptyのサイズを「内部」の場合に最適化することができます。ただし、標準で行う必要はありません。
そこで質問です:
私は何とか派生クラスの空の一部が実際にメモリを占有していないことをコンパイル時に決定することができます。
私はsizeof(Derived) = sizeof(a) + sizeof(b) ...
のようなチェックをすることができると私は理解しますが、あまりにも冗長であり、派生のようないくつかのクラスがあります。より洗練されたソリューションはありますか?
なぜ知りたいですか?メンバまたは基底クラスは、派生クラスのフットプリントに追加することなく(パディングに失われたスペースを使用して)メモリを占有することができます。また、構造体の 'sizeof'はメンバーと基底の' sizeof'の合計よりも小さくても大きくてもかまいません。 – skyking
これらのDerivedクラスを使用して、ネットワークデータを表現します。そのようなDerivedクラスはすべて、packed属性を持ちます。また、私はCuriously Recurring Template Patternを実装するためにいくつかのテンプレートクラスを継承するつもりです。したがって、派生クラスには共通の機能がいくつかあります。しかし、私はこの継承がDerivedクラスのレイアウトに影響しないことを望んでいます。 –