雨亭

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

posted on 2011-08-02 21:56  雨亭  阅读(272)  评论(0编辑  收藏  举报