#include <iostream>
using namespace std;
class A {
int Return1 () {return 1;}
};
int main() {
cout << "size of an empty class is: " << sizeof(A);
return 0;
}
上面的例子输出为: size of class A is 1
有一个非静态char成员变量的类对象占用的空间
只占1个字节,因为这个新增的char用了原来占用的1个字节
#include <iostream>
using namespace std;
class A {
int Return1 () {return 1;}
char a;
};
int main() {
cout << "size of class A is: " << sizeof(A);
return 0;
}
上面的例子输出为: size of class A is 1
非静态成员变量都占用对象的内存空间,但数据对齐可能也会占内存空间
非静态成员保存在类对象内,会占用空间
#include <iostream>
#include <iostream>
using namespace std;
class A {
int Return1 () {return 1;}
char a;
int b;
};
int main() {
cout << "size of class A is: " << sizeof(A);
return 0;
}
以上输出为:size of class A is: 8
#include <iostream>
#include <iostream>
using namespace std;
class A {
int Return1 () {return 1;}
char a;
char c;
int b;
};
int main() {
cout << "size of class A is: " << sizeof(A);
return 0;
}
以上输出为:size of class A is: 8
#include <iostream>
#include <iostream>
using namespace std;
class A {
int Return1 () {return 1;}
char a;
int b;
char c;
};
int main() {
cout << "size of class A is: " << sizeof(A);
return 0;
}
以上输出为:size of class A is: 12
这三种情况的内存图解:
静态成员变量不占用类对象的内存空间
静态成员变量保存在类对象外,类内共用同一地址,因此不占类对象空间
#include <iostream>
using namespace std;
class A {
int Return1 () {return 1;}
char a;
static int b;
};
int main() {
cout << "size of class A is: " << sizeof(A);
A a;
cout << "\nsize of object a of class A is: " << sizeof(a);
return 0;
}
输出为:size of class A is: 1 size of object a of class A is: 1
#include <iostream>
using namespace std;
class A {
virtual int Return1 () {return 1;}
//virtual int Return2 () {return 1;} //无论多少个虚函数,虚函数类对象都只有一个虚函数表指针
//char a; //如果把注释去掉,那么由于字节对齐,整个类对象占的大小将会变成16字节(这里是64位机器,指针8个字节,因此按8的倍数对齐)
};
int main() {
cout << "size of class A is: " << sizeof(A);
return 0;
}