面试/笔试_sizeof之应用实例

在学习sizeof的具体应用实例之前,需要对计算机的一些存储机制和各数据类型的大小有一定的了解。本文将相关知识放在了文章的结尾,主要是数据的对齐问题和数据类型的大小。下面是总结的sizeof的实例应用。

 

一、单个变量

         inta = 0;

         unsignedint b = 10;

         charc = ‘z’;

         char*p = NULL;

         sizeof(a);   //=4,此处即为int型数据的大小,为4字节

         sizeof(b);           //=4,unsigned影响的只是最高位的意义(正或负),不影响数据长度

         sizeof(c);           //=1,此处即为char型数据的大小,为1字节

         sizeof(p);           //=4,指针的大小是一个定值,就是4字节

求解单个变量的sizeof,将括号中的变量替换成该变量的数据类型,即为数据类型的大小,此处需注意unsigned不会影响数据类型的长度

 

二、数组

         inta_1[10] = {1,4,5,7};

         inta_2[] = {2,6,7,4,3,1};

         char*st_1 = “12345”;

         charst_2[] = “123456”;

         charst_3[] = “abc\n”;

         char*st_4 = (char*)malloc(100);

         sizeof(a_1);      //=40,为数组分配10个整型元素空间,每个元素4个字节,共40字节

         sizeof(a_2);      //=24,初始化6个整型元素,6*4个字节

         sizeof(st_1);     //=4,st_1为指针,固定大小为4字节

         sizeof(st_2);     //=7,字符串尾部有隐含的’\0’,因此共有7个char型元素,7*1个字节

         sizeof(st_3);     //=5,同样为字符串,\n记作1个字节,共5*1个字节

         sizeof(st_4);     //=4,st_4为指针,固定大小4个字节

 

注意:指针的大小,在32位系统下为4,在64位系统下为8,以下涉及到的虚指针同理

 

三、结构体

此处涉及到数据对齐的知识。在默认情况下,结构体内元素长度都小于处理器位数时,便以结构体内最长的数据元素为对其单位,即结构体的长度一定是最长数据元素的整数倍。

         struct{

short a1;

short a2;

short a3;

}A;

struct{

char b1;

long b2;

}B;

         sizeof(A);          //=6,A中元素都为short,长度都为2字节,共3*2字节

         sizeof(B);          //=8,B中b1为1字节,b2为4字节,以4字节对齐,共2*4字节

 

四、类

类的长度同样要遵循数据对齐的原则。

         classA1

         {  }

         classA2

{        A2();

~A2();       }

class A3

{        A3();

         virtual ~A3();

}

         classA4

{public:

bool x;

         int y;

         bool z;

}

class A5

{public:

int x;

         bool y;

         bool z;

}

class A6

{public:

         int x;

         static int y;

}

         classB1 : public A1

         {  }

         classB2: public vitual B1

         {  }

sizeof(A1);        //=1,空类所占空间为1

sizeof(A2);        //=1,调用A()与~A()只需要知道函数的地址,不会添加类型数据

sizeof(A3);        //=4,析构函数为虚函数,需要添加一个指向虚函数表的指针,指针为4

sizeof(A4);        //=12,此处注意与A5的区别,遵循数据对齐的原则

sizeof(A5);        //=8

sizeof(A6);        //=4,静态变量为全局变量,在全局数据区,不在栈区, sizeof不计算

sizeof(B1);        //=1,单一继承与多重继承空类,所占空间都为1

sizeof(B2);        //=4,虚继承涉及虚指针

 

五、自定义类型

自定义类型的sizeof取值就等于他的数据原型,如

typdef shortBIT;

sizeof(short) 即sizeof(BIT)

 

六、函数

函数的sizeof取值会被函数的返回值类型取代,如

         intfun();

         sizeof(fun())即 sizeof(int)

 

附:

1、各数据类型的大小

 sizeof(int)            =4;

sizeof(unsignedint)   = 4;

         sizeof(shortint)      = 2;

          sizeof(unsigned short) = 2;

         sizeof(longint)       = 4;

         sizeof(unsigned long)  = 4;

         sizeof(float)          =4;

          sizeof(double)         =8;

          sizeof(long double)    = 12;

2、数据对齐

参考链接:http://www.cnblogs.com/graphics/archive/2010/08/12/1797953.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值