sizeof的用法

1、sizeof的用法

a、针对对象

sizeof(object);或者sizeof  object;

b、针对类型

sizeof(typename);

2、内置类型sizeof运算结果

数据类型sizeof
bool1
char1
short2
int 4
long4
float4
double8
long double8
signed和unsigned的sizeof结果相同。

函数类型和指针类型都属于指针的范畴。指针主要用于存储地址,在32位系统下,任何类型的指针其所占用的

内存大小均为4字节;而函数类型,它以其返回类型作为自身类型进行sizeof取值。

double f2()
{
return 1.0;
}

sizeof(f2())=8;

sizeof(int *)=4;

3、数组和char

char a[]="abcdef";     //如果字符数组表示字符串的话,数组末尾自动插入‘\0’
char b[]={'a','b','c','d','e','f'};
int c[20]={3,4};
char d[2][3]={"aa","bb"};
sizeof(a)=7;sizeof(b)=6;sizeof(c)=80;sizeof(d)=2*3=6;
sizeof(*a)=1;sizeof(*b)=1;sizeof(*c)=4;sizeof(*d)=3;


4、struct数据结构的大小问题

对于struct数据结构,由于CPU的对齐问题导致struct的大小变得特别复杂:

struct tagPersonInfoA 
{
char * pszName;
int nSex;
double nHeight;
};

struct tagPersonInfoB
{
char * pszName;

        double nHeight;

int nSex;
};

sizeof(tagPersonInfoA )=16

sizeof(tagPersonInfoB)=24

同样的存储嘻嘻,但由于数据的排列顺序不同,最终占用的空间大小也不同,这就是CPU的对齐问题。


对一个空的struct结构体取sizeof,结果为1。这是编译器为了保证此空struct的存在而专门分配的一字节

不含继承和static成员变量的类,和struct复合类型一样,空的class同样也占用1字节;

采用对齐来计算对象的大小;

计算类对象的大小时,类的成员函数不占用对象空间。


在单继承情况下,只要class中存在virtual函数,在编译时编译器就会自动插入一个指向虚函数表的指针vptr(大小为4字节)。

VC编译器插入vptr的位置一般从数据成员开始。

而static成员是分配在全局区为类的所有对象共享,sizeof 时,不应该计入static成员。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值