2-1、2-2类和对象所占空间大小
#include<iostream>
using namespace std;
// 空类所占空间大小
class A
{
};
// 对象里只有一个普通的char型成员变量
class B
{
char ch;
};
// 对象里只有一个普通的char型和一个普通的int型成员变量
class C
{
char ch;
int num;
};
// 静态成员变量
class D
{
static int i;
};
// 针对的是普通成员函数
class E
{
void func()
{
}
};
// 针对的是静态成员函数
class F
{
void func()
{
}
};
// 针对的是虚函数
class G
{
virtual void func() // 虚函数
{
}
};
class H:public G
{
void func()
{
}
};
int main(void)
{
/************************** 一、 针对的是成员变量 ******************************/
cout << "针对的是成员变量" << endl;
/************************** 1-1 针对的是普通成员变量 ******************************/
/****************** 1-1-1 空类 、空对象 所占空间大小 *******************/
A a;
cout << sizeof(a) << endl; // 空对象 1个字节
cout << sizeof(A) << endl; // 空类 1个字节
/****************** 1-1-2 对象里只有一个普通的char型成员变量 所占空间大小 *******************/
cout << sizeof(B) << endl; // 1个字节
/****************** 1-1-3 对象里只有一个普通的char型和一个普通int型成员变量 所占空间大小 *******************/
cout << sizeof(C) << endl; // 8个字节 存在字节对齐问题。与C语言中的struct一样字节对齐问题
/************************** 1-2 针对的是静态成员变量 ******************************/
cout << sizeof(D) << endl; // 静态成员变量不占空间
/************************** 二、 针对的是成员函数 ******************************/
cout << "针对的是成员函数" << endl;
/************************** 2-1 针对的是普通成员函数 ******************************/
cout << sizeof(E) << endl; // 普通成员函数不占空间
/************************** 2-2 针对的是静态成员函数 ******************************/
cout << sizeof(F) << endl; // 静态成员函数不占空间
/************************** 2-3 针对的是虚函数 ******************************/
cout << sizeof(G) << endl; // 4个字节
cout << sizeof(H) << endl; // 4个字节
//虚函数有一个虚函数指针vptr,指向虚函数表。(x86)指针占4个字节。
return 0;
}
结论:
1)空的类或对象占用一个字节(成员函数不占内存(虚函数除外))
2)静态成员变量或静态成员函数不占内存
3)虚函数会生成一个虚指针指向虚函数表。指针占4个字节(X86)
注意:成员变量存在字节对齐现象。