C++クラスタイプ占有メモリサイズの問題
4187 ワード
1、問題の説明
次のプログラムの結果を解く
2、linuxでQTとg++をコンパイルして結果を実行する
XPでのQtコンパイル後の実行結果
3、分析
1)sizeofはスタックに割り当てられたサイズのみを計算し、グローバルデータ領域に割り当てられたサイズは計算しません.静的変数はグローバルデータ領域に格納されます.
2)クラスタイプ使用メモリサイズは、すべてのメンバー変数サイズの合計であり、データ配置規則を満たしています.
3)linuxではwindowsでの実行結果とは異なり,linuxでは4バイトを整数倍,xpでは最大メモリ占有変数を整数倍として整列すると推測される.
次のプログラムの結果を解く
#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では最大メモリ占有変数を整数倍として整列すると推測される.