C++ sizeof计算class大小

 
1 类与结构一样,都有字节对齐的问题
2 类中普通的函数不占用类的大小
3 类中虚函数占用一个地址位宽(4或8字节),且不论有多少个虚函数一共只占这么多
4 类中常量不占用类大小: const static /   enum{aa=2,bb=4};
5 类中static修饰的变量不占用类大小,因为修饰后存储在静态区域
6 子类的大小等于子类新增的加上父类的大小
 
1 sizeof是用来计算栈大小,不涉及全局区,故类的静态成员大小sizeof不涉及。
2 本题中的虚函数属于同一个类,故只需要一个指针指向虚函数表,所以在64位系统中占用8个字节。就算本题有100个虚函数,那么也只占用8个字节。
综上,占用栈空间的成员有:a, p, func1, func2,由于64位对其,故总空间为8+8+8=24字节。
 
sizeof(类)计算的是类中存在栈中的变量的大小,而类中的b和*c都是static静态变量,存在全局区中,因此不在计算范围之内,于是只剩下char a,void *p和两个virtual虚函数,a是char类型,占用一个字节,p是指针,在64位系统的指针占用8个字节,而两个虚函数只需要一个虚函数表指针,也是八个字节,加上类中的对齐方式(char a对齐时后面补上7个字节),故答案为24.

转载于:https://www.cnblogs.com/cxy931980808/p/6676831.html

在C语言中,sizeof操作符用于获取变量或类型的大小。在这里引用的代码示例中,使用sizeof操作符获取了不同类型变量的大小。引用展示了使用sizeof来获取结构体和结构体引用的大小,结果都是32,因为结构体中的成员总大小为32。引用展示了使用sizeof来获取不同类型指针的大小,比如指向字符串的指针的大小是4,指向浮点数的指针的大小是8。引用中给出了更多的示例,说明了不同类型指针和函数指针的大小通常都是4字节。所以在C语言中,使用sizeof来获取一个变量的大小是非常常见的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C/C++ | sizeof()函数](https://blog.csdn.net/weixin_47187147/article/details/123470258)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [C++ sizeof的使用总结](https://blog.csdn.net/MegatronC/article/details/8918661)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值