先贴代码:
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<deque>
#include<iterator>
using namespace std;
class C1
{
private:
int a;
int f;
public:
float b;
char c;
bool e;
short d;
void getA()
{
int c;
}
};
class C2
{
private:
int a;
int f;
public:
float b;
char c;
short d;
bool e;
void getA()
{
int c;
}
};
class C3
{
public:
static int a;
int b;
};
class C4:public C3
{
static int a;
};
class C5:public C3
{
static int b;
};
int main(int argc, char *argv[])
{
vector<int> v_int ;
deque<int> d_int;
int a[5] = {1,2,3,4,5};
int *b;
cout<<"sizeof(a):"<<sizeof(a)<<endl;
cout<<"sizeof(b):"<<sizeof(b)<<endl;
cout<<"sizeof(C1):"<<sizeof(C1)<<endl;
cout<<"sizeof(C2):"<<sizeof(C2)<<endl;
cout<<"sizeof(C3):"<<sizeof(C3)<<endl;
cout<<"sizeof(C4):"<<sizeof(C4)<<endl;
cout<<"sizeof(C5):"<<sizeof(C5)<<endl;
cout<<"sizeof(vector_int):"<<sizeof(vector<int>)<<endl;
cout<<"sizeof(deque_int) :"<<sizeof(deque<int>)<<endl;
cout<<"sizeof(vecotr_char):"<<sizeof(vector<char>)<<endl;
cout<<"sizeof(deque_char):"<<sizeof(deque<char>)<<endl;
cout<<"sizeof(v_int):"<<sizeof(v_int)<<endl;
cout<<"sizeof(d_int):"<<sizeof(d_int)<<endl;
cout<<"after insert five elements:"<<endl;
for(int i = 0;i < 100; i++)
{
v_int.push_back(i);
d_int.push_back(i);
}
cout<<"sizeof(v_int):"<<sizeof(v_int)<<endl;
cout<<"sizeof(d_int):"<<sizeof(d_int)<<endl;
return 0;
}
结果如下:
sizeof(a):20
sizeof(b):4
sizeof(C1):16
sizeof(C2):20
sizeof(C3):4
sizeof(C4):4
sizeof(C5):4
sizeof(vector_int):12
sizeof(deque_int) :40
sizeof(vecotr_char):12
sizeof(deque_char):40
sizeof(v_int):12
sizeof(d_int):40
after insert five elements:
sizeof(v_int):12
sizeof(d_int):40
从上面看到:
Ubuntu 12.04的g++编译环境下:
1.sizeof计算类的大小的话需要判定成员变量出现的顺序。
2.static 静态成员变量不占sizeof的大小
3.容器对象的大小就是类的大小,不管对象里有多少元素。
4.数组的sizeof就是元素类型的大小和数组大小的乘积。
另外,sizeof可应用于任何变量名、类型名或常量值。sizeof是一个运算符,而不是函数。在编译时起作用,而不是运行时,所以不会造成性能损失,sizeof只有在操作类型名时才需要加括号,其他时候可加可不加。