這是上篇文章的補充,上一個關於sizeof的文章鏈接如下:http://www.linuxidc.com/Linux/2012-12/75896.htm
先貼代碼:
#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只有在操作類型名時才需要加括號,其他時候可加可不加。