本机环境64bit mac os,xcode
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class test{
public:
test();
virtual ~test();
virtual void get_a_c();
private:
int a;
char c;
};//8+5
class derived_test:public test{
public:
virtual ~derived_test();
private:
double d;
};//8+5+8
class base{
private:
char a;//1
static int reference_count;//
public:
base();
virtual ~base();//8
static int get_count();
};
int base::get_count(){
return reference_count;
}
int base::reference_count=0;
class new_base{
private:
char a;//1
double price;//8
std::vector<double> dvec;//24
std::string name;//24
static int reference_count;
public:
new_base();
virtual ~new_base();//8
static int get_count();
};
int new_base::get_count(){
return reference_count;
}
int new_base::reference_count=0;
class derived:public base{
private:
int min_qty;//4
double discount;//8
static int newp;
public:
derived();
virtual ~derived(){};
};
class new_derived:public new_base{
private:
double discount;//8
int min_pty;//4
static int newp;
public:
new_derived();
virtual ~new_derived(){};
};
int main(){
cout<<sizeof(test)<<endl;
cout<<sizeof(derived_test)<<endl;
cout<<sizeof(base)<<endl;
cout<<sizeof(new_base)<<endl;
cout<<sizeof(derived)<<endl;
cout<<sizeof(new_derived)<<endl;
return 0;
}
16
24
72
72
88
88
Program ended with exit code: 0
测试2
#include <iostream>
using namespace std;
class A{};//1
class B{
void fun();//1
};
class C{
virtual void fun();//8
};
class D{
virtual void fun1();
virtual void fun2();//8
};
class E:public virtual A{
};
class F:public virtual A{
virtual void fun();
};
class G:public A{
};
int main(){
cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl;
cout<<sizeof(C)<<endl;
cout<<sizeof(D)<<endl;
cout<<sizeof(E)<<endl;
cout<<sizeof(F)<<endl;
cout<<sizeof(G)<<endl;
return 0;
}
1
1
8
8
8
8
1
Program ended with exit code: 0
总结:
int: 4Byte
point: 8Byte
std::string name;//24
double price;//8
std::vector<double> dvec;//24
virtual void get();//8
static int count;//0
class B : public virtual A{};//8
类的sizeof的大小跟操作系统(本机按8Byte对齐)和编译器有关。