sizeof(datatype),这些跟这些数据类型在内存中的字节数相等,比如,sizeof(int)=4,因为在大多数的32位机和64位机里的int类型数据所占的字节数都是4。
然后说说sizeof()某个类的值,总的来说,某个类的sizeof()的值等于其所有成员变量所占字节数的和,但是,静态变量由于存在于堆里,所以不计算在内。而virtual 函数因为会有个指针,所以也会存在一个指针所占的字节数。
通过上面的方法计算出的结果为0的类中,VC++都将其改为了1.原因是,一个类的sizeof()为0.假设为A。
class A{};
A obj_a;
int b;
那么我们对obj_a的内存操作将会影响到b。
但是GNU C/ C++里面在3.4. 3版本里还是没有处理完全,在一个类里只存在一个空数组的时候,其sizeof()的值为0。在较新的版本里或许已经修改了,由于我用的是mingw所以不清楚。
其实具体的是多少,最好还是自己编译运行一下。下面符上我运行后出来的值。
-------------------------------------
/**********************************
* sizeof()的class与类型值
**********************************/
#include<iostream>
using std::cout;
using std::endl;
class A{}; //空类
class B{
virtual void foo();
}; //虚函数
class C{
char cstr[0];
}; //空数组
class D{
static int sta;
}; //静态变量
class E{
void foo2();
static int stat;
}; //静态变量和一个函数
int main()
{
void *ptr;
cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl;
cout<<sizeof(C)<<endl;
cout<<sizeof(D)<<endl;
cout<<sizeof(E)<<endl;
cout<<"----------------"<<endl;
cout<<sizeof(bool)<<endl;
cout<<sizeof(char)<<endl;
cout<<sizeof(short)<<endl;
cout<<sizeof(int)<<endl;
cout<<sizeof(long)<<endl;
cout<<sizeof(float)<<endl;
cout<<sizeof(double)<<endl;
cout<<sizeof(ptr)<<endl;
system("pause");
return 0;
}
/*-------------------
sizeof(A)==1;
sizeof(B)==sizeof(ptr);
sizeof(C)==0; //vc里是1,g++是0
sizeof(D)==1;
sizeof(E)==1;
----------------------
sizeof(bool)==1;
sizeof(char)==1;
sizeof(short)==2;
sizeof(int)==4;
sizeof(long)==4;
sizeof(float)==4;
sizeof(double)=8;
void * ptr;
sizeof(ptr)==4;//x86
sizeof(ptr)==8;//x64