C++面试4-sizeof解析

news2025/5/23 13:42:20

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.coloradmin.cn/o/2383924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CyberSecAsia专访CertiK首席安全官:区块链行业亟需“安全优先”开发范式

近日&#xff0c;权威网络安全媒体CyberSecAsia发布了对CertiK首席安全官Wang Tielei博士的专访&#xff0c;双方围绕企业在进军区块链领域时所面临的关键安全风险与防御策略展开深入探讨。 Wang博士在采访中指出&#xff0c;跨链桥攻击、智能合约漏洞以及私钥管理不当&#x…

文件操作和IO-3 文件内容的读写

文件内容的读写——数据流 流是操作系统提供的概念&#xff0c;Java对操作系统的流进行了封装。 数据流就像水流&#xff0c;生生不息&#xff0c;绵延不断。 水流的特点&#xff1a;比如要100mL的水&#xff0c;可以一次接10mL&#xff0c;分10次接完&#xff0c;也可以一次接…

SpringAI 大模型应用开发篇-SpringAI 项目的新手入门知识

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 1.0 SpringAI 概述 目前大模型应用开发最常见的框架就是 LangChain&#xff0c;然而 LangChain 是基于 Python 语言&#xff0c;虽然有 LangChain4j&#xff0c;但是对于大量使…

编程速递-RAD Studio 12.3 Athens五月补丁:May Patch Available

编程速递-RAD Studio 12.3 Athens四月补丁&#xff1a;关注软件性能的开发者&#xff0c;安装此补丁十分必要 今天 &#xff08;2025 年 5 月 19 日&#xff09;Embarcadero 发布了 RAD Studio、Delphi 和 CBuilder 12.3 Athens&#xff08;雅典&#xff09;的第二个补丁。 RA…

Matlab学习合集

1.变量 2.常见的数学函数 3. 向量 向量的创建&#xff1a; 直接创建&#xff1a;针对于数量少的情况 冒号法 函数创建&#xff1a;

基于labview的声音采集与存储分析系统

基于LabVIEW的声音信号采集与存储分析系统开发实战&#xff1a;从原理到代码实现 &#xff08;内含源码&#xff09;基于labview的声音采集与处理系统 点击跳转工坊 点击跳转视频 引言 在音频技术与工业监测领域&#xff0c;声音信号的实时采集与分析是一项基础且关键的任务。…

【项目记录】部门增删改及日志技术

1 删除部门 1.1 需求 删除部门数据。在点击 "删除" 按钮&#xff0c;会根据ID删除部门数据。 了解了需求之后&#xff0c;我们再看看接口文档中&#xff0c;关于删除部门的接口的描述&#xff0c;然后根据接口文档进行服务端接口的开发。 1.2 接口描述 1.2.1 基…

TDengine 更多安全策略

简介 上一节我们介绍了 TDengine 安全部署配置建议&#xff0c;除了传统的这些配置外&#xff0c;TDengine 还有其他的安全策略&#xff0c;例如 IP 白名单、审计日志、数据加密等&#xff0c;这些都是 TDengine Enterprise 特有功能&#xff0c;其中白名单功能在 3.2.0.0 版本…

电子制造企业智能制造升级:MES系统应用深度解析

在全球电子信息产业深度变革的2025年&#xff0c;我国电子信息制造业正经历着增长与转型的双重考验。据权威数据显示&#xff0c;2025年一季度行业增加值同比增长11.5%&#xff0c;但智能手机等消费电子产量同比下降1.1%&#xff0c;市场竞争白热化趋势显著。叠加关税政策调整、…

Java使用Collections集合工具类

1、Collections 集合工具类 Java 中的 Collections 是一个非常有用的工具类&#xff0c;它提供了许多静态方法来操作或返回集合。这个类位于 java.util 包中&#xff0c;主要包含对集合进行操作的方法&#xff0c;比如排序、搜索、线程安全化等。 Java集合工具类的使用&#x…

python打卡day33

知识点回顾&#xff1a; PyTorch和cuda的安装查看显卡信息的命令行命令&#xff08;cmd中使用&#xff09;cuda的检查简单神经网络的流程 数据预处理&#xff08;归一化、转换成张量&#xff09;模型的定义 继承nn.Module类定义每一个层定义前向传播流程 定义损失函数和优化器定…

同城上门预约服务系统案例分享,上门服务到家系统都有什么功能?这个功能,很重要!

你以为上门按摩这类平台只要做好接单派单就万事大吉了&#xff1f;大错特错&#xff01;市面上90%的系统只会吹嘘基础功能&#xff0c;却对最关键的财税问题避而不谈。很多创业者直到被税务稽查才发现&#xff0c;自己每年都在白白多交几倍的冤枉税&#xff01;举个例子&#x…

用 UniApp 开发 TilePuzzle:一个由 CodeBuddy 主动驱动的拼图小游戏

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 起心动念&#xff1a;从一个小游戏想法开始 最近在使用 UniApp 做练手项目的时候&#xff0c;我萌生了一个小小…

HJ101 输入整型数组和排序标识【牛客网】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 HJ101 输入整型数组和排序标识 一、题目描述 二、测试用例 三、解题思路 基本思路&#xff1a;   选择一个排序算法&#xff0c;然后根据标识确定升序还是降序&#xff1b;具体思路&a…

在Linux debian12系统上使用go语言以及excelize库处理excel数据

go-do-excel 一、介绍 myBook.xlsx表中,B列是“全部IP地址“,A列是“分发成功的IP地址“,本脚本采用go语言编写,通过读取myBook.xlsx中B列“全部IP地址“和A列“分发成功的IP地址“数据,计算出“分发失败的IP地址“数据,将其写入到C列。 二、编程语言 本脚本在Linux De…

【Python/Tkinter】实现程序菜单

程序源码&#xff1a; import tkinter as tk from tkinter.colorchooser import askcolordef set_colour():saskcolor(color"red",title"选择背景色")root.config(bgs[1])class Application(tk.Frame):def __init__(self,masterNone):super().__init__(ma…

“轩辕杯“云盾砺剑 CTF挑战赛web方向题解

目录 ezjs 签到 ezssrf1.0 ezflask ezrce ezsql1.0 ezweb ezjs 看到这个&#xff0c;直接访问getflag.php&#xff0c;POS提交score 100000000000 签到 6个小模块&#xff0c;我直接放bp的结果 1 2 3 4 5 6 ezssrf1.0 ?urlhttp:127.0.1/FFFFF11111AAAAAggggg.php也可…

常用UI自动化测试框架

&#x1f50d; 常用UI自动化测试框架全览&#xff08;Web / 移动 / 桌面 / AI驱动&#xff09; UI&#xff08;用户界面&#xff09;测试框架是一类用于自动化测试应用图形界面的工具&#xff0c;帮助开发者和测试人员验证界面元素的功能性、交互性和视觉一致性。本文系统梳理了…

已经 上线 Vue 项目 国际化 i18n 中译英

省流说明:本文不是把项目中译英,只是抽取js、vue文件里的中文到JSON文件中,en.json里的value还是需要自己翻译成英文 ### 安装 `npm install vve-i18n-cli -D` ### package.json 里添加脚本命令,简化命令使用 ```json { "scripts": { "i18n": …

RISC-V 开发板 MUSE Pi Pro Gstreamer 编码UVC及MIPI CSI摄像头视频流

视频讲解&#xff1a; RISC-V 开发板 MUSE Pi Pro Gstreamer 编码UVC及MIPI CSI摄像头视频流 Gstreamer 在视频编码、解码、保存等场景下非常常用&#xff0c;其基于插件化的架构&#xff0c;可以玩的很花&#xff0c;进迭时空的Spacemit GStreamer 支持 spacemitdec 专有插件&…