C++ 类类型占用内存大小一题

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 下是以最大占用内存的变量为整数倍进行对齐。

原文地址:https://www.cnblogs.com/aqing1987/p/4195166.html