C++クラスタイプ占有メモリサイズの問題

4187 ワード

1、問題の説明
次のプログラムの結果を解く
#include <iostream>



using namespace std;



class A1 {

public:

    int a;

    static int b;

    A1();

    ~A1();

};



class A2 {

public:

    int a;

    char c;

    A2();

    ~A2();

};



class A3 {

public:

    float a;

    char c;

    A3();

    ~A3();

};



class A4 {

public:

    float a;

    int b;

    char c;



    A4();

    ~A4();

};



class A5 {

public:

    double d;

    float a;

    int b;

    char c;



    A5();

    ~A5();

};



int main()

{

    cout << sizeof(A1) << endl;

    cout << sizeof(A2) << endl;

    cout << sizeof(A3) << endl;

    cout << sizeof(A4) << endl;

    cout << sizeof(A5) << endl;



    return 0;



}

 
2、linuxでQTとg++をコンパイルして結果を実行する
$ ./tt

4

8

8

12

20

XPでのQtコンパイル後の実行結果
4

8

8

12

24

 
3、分析
1)sizeofはスタックに割り当てられたサイズのみを計算し、グローバルデータ領域に割り当てられたサイズは計算しません.静的変数はグローバルデータ領域に格納されます.
2)クラスタイプ使用メモリサイズは、すべてのメンバー変数サイズの合計であり、データ配置規則を満たしています.
3)linuxではwindowsでの実行結果とは異なり,linuxでは4バイトを整数倍,xpでは最大メモリ占有変数を整数倍として整列すると推測される.