C++中sizeof如何计算类的大小(补充)


这是上篇文章的补充,上一个关于sizeof的文章链接如下:

先贴代码:

#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只有在操作类型名时才需要加括号,其他时候可加可不加。

  • 1
  • 2
  • 下一页

相关内容