1

重複の可能性:
構造体の sizeof が各メンバーの sizeof の合計と等しくないのはなぜですか?

なぜ出力は8
そうじゃないsizeof(int)+sizeof(char) = 5

class CBase 
{ 
    int a; 
    char p; 
}; 

int main() {

    cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl;
    getchar();
} ///:~
4

2 に答える 2

5

メモリは通常、パフォーマンスを向上させるためにコンパイラによって調整されます。そのため、クラスまたは構造体は、その部分の合計よりも多くのメモリ領域を必要とする場合があります。

于 2012-05-14T09:00:37.483 に答える
1

コンパイラ / ランタイムが 8 バイト境界に位置合わせされているように見えます。これは、コンパイラまたはランタイム スイッチによって変更できる場合があります。たとえば、AIX では、C++ のメモリ割り当てが 16 バイトにアラインされているため、より多くのメモリを使用する可能性があります。

この調整を行わないために、実行時にこれを回避する方法があります (アプリが VMX を使用できないという欠点があります)。アプリケーションを実行する前に、この環境変数をアプリケーションに設定するだけです。

export LIBCPP_NOVMX=1
于 2012-05-14T09:21:23.410 に答える