当前位置: 首页 > news >正文

C++面试4-sizeof解析

C++sizeof关键字的深度解析

一、本质认知:编译器的尺度

1. 编译期操作符的基因

int arr[5];
cout << sizeof(arr);  // 输出20(假设int为4字节)
  • 非运行时特性:在编译阶段完成计算,不会生成任何机器指令
  • 表达式不求值sizeof(++i)不会改变i的值
  • 类型感知:对类型名使用时必须加括号(sizeof(int)合法,sizeof int非法)

2. 底层原理映射表

操作对象编译器行为典型示例
基本类型直接查类型系统元数据sizeof(int)→4
类对象计算所有成员总大小+对齐填充class A{int x;};→4
指针返回地址长度(与类型无关)sizeof(char*)→8(64位系统)
数组计算整个数组内存容量int arr[5];→20

二、类与对象的暗战:内存布局的密码

1. 空类的生存法则

class Empty {};
cout << sizeof(Empty);  // 输出1(编译器插入占位字节)
  • 存在性证明:确保不同实例有独立地址
  • 继承时的优化:空基类优化(EBO)可消除大小开销

2. 虚函数的代价

class Base { virtual void foo(){} };
cout << sizeof(Base);  // 输出8(64位系统vptr指针)
  • 虚表指针(vptr):每个多态类携带隐形成员
  • 多重继承倍增:每层虚继承增加一个vptr

3. 内存对齐的暴政

struct Weird {char c;     // 1字节// 3字节填充int i;      // 4字节double d;   // 8字节
}; 
cout << sizeof(Weird);  // 输出1+3+4+8=16(实际可能更大)
http://www.xdnf.cn/news/529939.html

相关文章:

  • Python Day26 学习
  • Flink流处理:实时计算URL访问量TopN(基于时间窗口)
  • GitHub 趋势日报 (2025年05月18日)
  • 《CF25E Test》
  • 浏览器的奇幻之旅:从输入网址到页面出现的幕后故事
  • ISO 26262-5 硬件详细设计
  • RV1126多线程获取SMARTP的GOP模式数据和普通GOP模式数据
  • 如何用体育数据做分析:从基础统计到AI驱动的决策科学
  • DB31/T 1545—2025《卫生健康数据分类分级要求》上海地方标准全面解析与未来对医院数据管理以及数据编程影响
  • gtest 库的安装和使用
  • 【保姆级】Nginx简介以及安装
  • vue3中element-plus修改el-tooltip的宽度
  • vue2使用three.js实现一个旋转球体
  • AI自媒体封面生成系统
  • c++字符串常用语法特性查询示例文档(二)
  • HarmonyOS开发样式布局
  • web常见的攻击方式
  • UniApp 实现的文件预览与查看功能#三方框架 #Uniapp
  • 阻塞队列:线程安全与生产者消费者模型解析
  • nginx 流量控制
  • map与set封装
  • Web安全基础
  • 十三、面向对象底层逻辑-Dubbo序列化Serialization接口
  • MacBook连接不上星巴克Wi-Fi的解决方法
  • 《Effective Python》第三章 循环和迭代器——在遍历参数时保持防御性
  • 江协科技EXTI外部中断hal库实现
  • 需求频繁变更?AI 驱动的自动化解决方案实践
  • 企业销售管理痛点解析与数字化解决方案
  • Unity 如何使用Timeline预览、播放特效
  • 第十六届蓝桥杯复盘