为了提高CPU的存储效率,编译器往往对class 和 struct 自定义类型进行内存对齐。
内存对齐的规则视编译器不同而不同。
我们可以使用
#pragma pack(n)
来设置成 n字节的对齐方式
类中的static变量不会给类带来空间负担,也就是不被计算到类的大小中。
#include <iostream>
using namespace std;
#pragma pack(4)
class CTest
{
private:
char ch;
int n;
static char sch;
public:
CTest():ch('\0'),n(0)
{
}
virtual void mem_fun()
{
}
};
char CTest::sch = '\0';
class B
{
public:
static int n;
};
int B::n = 0;
void main()
{
cout << sizeof(CTest);
cout << sizeof(B);
}
这种情况下 输出:121
也就是CTest 大小为12字节。
B的大小为1字节。
#include <iostream>
using namespace std;
#pragma pack(1)
class CTest
{
private:
char ch;
int n;
static char sch;
public:
CTest():ch('\0'),n(0)
{
}
virtual void mem_fun()
{
}
};
char CTest::sch = '\0';
class B
{
public:
static int n;
};
int B::n = 0;
void main()
{
cout << sizeof(CTest);
cout << sizeof(B);
}
这种情况输出:91
可见CTest大小为9
B的大小为1