C++中sizeof的总结

1.基本类型的sizeof

2.指针sizeof 

指针记录了另一个对象的地址,等于计算机内部地址总线的宽度。而且指针变量的sizeof值与指针所指的对象没有任何关系,所以在32位计算机中,一个指针变量的返回值必定是4字节

char* pc = "abc";
int* pi;
string* ps;
char** ppc = &pc;
void (*pf)(); // 函数指针

sizeof( pc ); // 结果为4
sizeof( pi ); // 结果为4
sizeof( ps ); // 结果为4
sizeof( ppc ); // 结果为4
sizeof( pf ); // 结果为4

3.结构体sizeof

  • 字节对齐

原则:所有的成员在分配内存时都要与所有成员中占内存最多的数据类型所占内存空间的字节数对齐。

注意:这里时最多的数据类型,而不是最多的数据。

  • 具体参考

  1. sizeof()计算结构体的大小
  2. 结构体字节对齐,C语言结构体字节对齐详解

4.类sizeof

  • 公式:

对象大小  =  虚函数指针(多个虚函数也只有一个指针,指向虚函数表)  +   所有非静态数据成员大小   +   因对齐而多占的字节

  • 空类

空类型的实例不包括任何信息,本来求sizeof应该是0,但是我们在声明该类型实例的时候,必须给实例在内存中分配一定的空间,否则无法使用该实例。由于空类型不含任何信息,故而所占的内存大小由编译器决定,一般占1Byte

  • 虚函数

如果在类中声明了虚函数(不管是1个还是多个),那么在实例化对象时,编译器会自动在对象里安插一个指针指向虚函数表VTable,在32位机器上,一个对象会增加4个字节来存储此指针

  • 成员函数、构造函数、析构函数

成员函数(包括静态与非静态)不占用类对象的存储空间

  • 静态成员变量

由于静态成员变量不在对象中存储,因此不占用类对象的存储空间

参考:

1.C语言字节对齐问题详解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火柴的初心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值