3

与えられた例のクラス

class test
{
public:
test();
~test();
void someMethod();
void someOtherMethod();

private:
int var;
};

であるsizeof(test) == sizeof(int)か、またはそのような仮定を行うことはできませんか? プラットフォーム/コンパイラに依存しますか?

編集:

その動機は、ストリームを介してクラスを読み書きすることです。クラスには実際に単一の整数が含まれ、いくつかの便利なアクセス方法があります。整数の最上位バイトはフラグ用に予約されており、下位 3 バイトは整数の 24 ビット数を表します。これを考えると、そのようなクラス変数の配列を書き、必要に応じてそれらをプレーンな int として読み取ることが考えられます。可能な答えがあると引用されている質問は、その側面に対処していません-複数の要素でパディングすることについてです。

4

2 に答える 2

6

その仮定をすることはできません。

コンパイラは、パディングを追加してパフォーマンスを向上させることができます。おそらく、ターゲット システムは 64 ビット値しか読み取れません。小さい値を読み取るには、64 ビットを読み取ってから 32 ビットにマスクする必要があります。このようなシステムでは、クラスを 64 ビットにパディングする方が効率的です。

クラスまたは構造体を要求した正確なサイズにする必要がある場合、ほとんどすべてのコンパイラには、パディングを制御するための属性またはプラグマがあります

于 2013-07-11T16:25:16.110 に答える