C++——sizeof()

sizeof计算的是在栈中分配的内存大小

1、sizeof不计算static变量占得内存

2、指针的大小一定是4个字节,不管是什么类型的指针

3、各类型大小

      char型:1个字节

      int 型:4个字节

     short int 型:2个字节

     long int 型:4个字节

     float 型:4个字节

    double 型:8个字节

    string 型:4个字节

    空类:1个字节

class A
 { 
   A();
   ~A();
 };//空类大小为1

  单一继承的空类:1个字节

  虚继承(涉及到虚指针):4个字节

4、数组长度:

指定了数组长度,不看元素个数,总字节数=数组长度*sizeof(元素类型)

未指定数组长度,按实际元素个数类确定(若是字符数组,末尾空字符)

int x[10];int *p=x;
sizeof(x):数组中所有元素所占空间大小 10*4=40
sizeof(*x):数组x第一个元素所占空间大小 4
sizeof(p):p指针本身所占空间大小 4
sizeof(*p):p所指对象的大小,也即是数组x第一个元素的大小 4
sizeof(x)/sizeof(*x) :x的元素个数 10
sizeof(p)/sizeof(*p):1 sizeof(p)算出指针p的大小,而非指向的数组大小,指针实际上违背是实际使用 

5、结构体对象的长度:

内存对齐问题:第一个成员在与结构体变量偏移量为0的地址处;

其他成员变量对齐到整数倍地址,对齐数VS 8,linux 4;

结构体的总大小为最大对齐数的整数倍;

若嵌套结构体,对齐内部成员最大的对齐数。

不同顺序会影响结构体大小

struct stu1
{
     int i;    //4    偏移量0   0能被4整除,=4
     char c;   //1    偏移量4   1能被4整除,=1+4=5
     int j;    //4    偏移量为5  5不能被4整除,补3个字节=8能被4整除,8+4=12
};  //大小:12
struct stu2
{
      int k;    //4  偏移量0 0能被4整除,=4
     short t;  //2  偏移量4 4+2=6,不能被最大类型int=4整除,补2个字节6+2=8
};  //大小:8
struct stu3
{ 
       char c1;    //1  偏移量0  大小1 0能被1整除,=1
       int i;      //4  偏移量1  大小为4 1能被4整除 =1+3+4=8
       char c2;    //1  偏移量8  大小为1 8能被1整除 =8+1=9 9不能被最宽4整除 9+3=12
}; //大小:12
struct stu4
{
       char c1;   //1 偏移量0 大小1 0能被1整除,=1
       char c2;  //1  偏移量1 大小1 1能被1整除,=1+1=2
       int i;    //4  偏移量2 大小4 2不能被4整除 =2+2+4=8
 }//大小:8
 struct stu5
 {
    float f;   //4  偏移量0    0能被4整除,=4
	 char p;   //1   偏移量4    4能被1整除,=4+1=5
	 int adf[3]; //3*4=12  偏移量5   5不能被4整除,=5+3=8偏移量为8  8+12=20
 }//大小:20
 class A
{
	char c1;   //1  0   =1
	int i;     //4  1  1/4不能  偏移量1+3=4  =4+4=8
	short s;   //2  8  8/2可以  =8+2=10
	char c2;   //1  10 10/1可以 =10+1=11 
	char a[];//未指定大小的数组且未填充值,不占用内存
};//大小11不能被4整除,=12

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值