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

详解c++中的sturct

在c中struct只能存放数据在c中为其扩展了创建成员函数的功能struct中的成员默认都是public的struct的继承默认也是public并且它是无法用于定义模板参数这是它与class的主要区别。虽然在c中struct可以定义成员函数不过我们还是将它主要用于定义一些 POD(plain old data)在 C11 及之后的标准中POD 类型需要同时满足两个独立条件平凡​​类型具有默认的构造/拷贝/移动/析构函数可自动生成且非虚标准布局Standard Layout​​内存布局与 C 兼容成员排列顺序符合特定规则同时满足平凡性和标准布局的类型称为 POD 类型这类数据可以安全使用 memcpy 等底层内存操作因为它们的内存布局与 C 完全兼容且没有特殊处理需求。内存对齐内存对齐主要有三点原因一是为了提高cpu的访问效率cpu在读取时是按照块进行读取的比如64位系统一般一次性读取8字节。二是早期某些平台不对齐访问会直接崩溃或触发异常三是为了保证原子操作原子指令通常要求数据对齐否则无法保证原子性。内存对齐的基本规则每个成员按照其自身大小对齐char按1字节int按4字节double按8字节成员的起始地址必须是其对齐值的整数倍struct整体大小必须是最大对齐值的整数倍举例structExample1{chara;// 偏移0占用1字节// 填充7字节让double从8的倍数开始doubleb;// 偏移8占用8字节charc;// 偏移16占用1字节// 填充7字节使总大小为8的倍数};// 总大小24字节structExample2{doubleb;// 偏移0占用8字节chara;// 偏移8占用1字节charc;// 偏移9占用1字节// 填充2字节偏移10-11← int 需要4字节对齐intd;// 偏移12占用4字节 ← 10不是4的倍数要从12开始};// 总大小16字节 ✓structExample3{// 从大到小排列doubleb;// 偏移0占用8字节intd;// 偏移8占用4字节chara;// 偏移12占用1字节charc;// 偏移13占用1字节// 填充2字节偏移14-15使总大小为8的倍数};// 总大小16字节在内存对齐的情况下我们想要访问一个数据cpu都只需要读取一次内存假设没有内存对齐拿Example1的成员顺序举例内存的前8字节会存放一个完整的char a1字节和double b的前7字节。如果我们想要访问这个double bcpu就需要访问两次内存才能拼凑出完整的数据。为了提高运行效率和确保稳健性一般建议开启内存对齐小建议按从大到小的顺序声明成员可以减少内存浪费参考Example3在一些嵌入式设备中内存是比较宝贵的内存对齐虽然可以提高运行效率但会浪费一些内存空间这时候我们可以通过#pragma pack来关闭内存对齐用时间换空间。// 正常对齐默认structNormal{chara;// 1字节// 填充7字节doubleb;// 8字节charc;// 1字节// 填充7字节};// 总大小24字节// 1字节对齐取消填充#pragmapack(1)structPacked1{chara;// 1字节doubleb;// 8字节charc;// 1字节};// 总大小10字节#pragmapack()// 恢复默认对齐// 2字节对齐#pragmapack(2)structPacked2{chara;// 1字节// 填充1字节doubleb;// 8字节按2字节对齐每次最多填充1字节charc;// 1字节// 填充1字节};// 总大小12字节#pragmapack()// 4字节对齐#pragmapack(4)structPacked4{chara;// 1字节// 填充3字节doubleb;// 8字节按4字节对齐charc;// 1字节// 填充3字节};// 总大小16字节#pragmapack()//恢复正常对齐intmain(){printf(Normal: %zu 字节\n,sizeof(Normal));printf(Pack(1): %zu 字节\n,sizeof(Packed1));printf(Pack(2): %zu 字节\n,sizeof(Packed2));printf(Pack(4): %zu 字节\n,sizeof(Packed4));return0;}//输出Normal:24字节Pack(1):10字节Pack(2):12字节Pack(4):16字节

相关文章:

详解c++中的sturct

在c中struct只能存放数据,在c中为其扩展了创建成员函数的功能,struct中的成员默认都是public的,struct的继承默认也是public,并且它是无法用于定义模板参数,这是它与class的主要区别。 虽然在c中struct可以定义成员函数…...

linux学习进展 僵死进程

在前一篇 fork 详解的笔记中,我们提到了一个关键问题——僵尸进程(僵死进程),它是 Linux 进程管理中最常见的“隐患”之一。很多初学者在使用 fork 创建子进程后,常会遇到“进程明明已经退出,却依然在进程列…...

MetaGPT:多智能体协作框架的工程实践

MetaGPT:多智能体协作框架的工程实践 各位开发者朋友们,大家好!我是架构师老杨,在技术圈摸爬滚打已经15年了——写过Java后端系统,搞过微服务架构,玩过云原生落地,最近两年更是扎进了AI Agent和…...

保姆级避坑指南:在Proxmox VE 8.4上给Windows 11虚拟机直通NVIDIA 2080 Ti显卡

保姆级避坑指南:在Proxmox VE 8.4上给Windows 11虚拟机直通NVIDIA 2080 Ti显卡 虚拟化技术正逐渐从企业级应用渗透到个人用户领域,尤其是对于需要高性能图形处理的场景。Proxmox VE作为一款开源的虚拟化平台,配合NVIDIA消费级显卡&#xff0c…...

JAVA OOP概念POJO、DTO、DAO、PO、BO、VO详解

在 Java 后端开发中,面对复杂的业务场景和团队协作,如果没有清晰的数据对象分层,代码很容易变成“意大利面”——数据库字段变更影响前端接口,敏感信息意外泄露,业务逻辑与数据访问混为一谈。 今天,我们结合…...

告别卡顿!用Android Studio Profiler揪出GPU性能瓶颈的保姆级实战

告别卡顿!用Android Studio Profiler揪出GPU性能瓶颈的保姆级实战 当你在测试最新开发的3D游戏时,突然发现角色转身时画面明显卡顿;或者电商App在快速滑动商品列表时,出现了令人不悦的白帧闪烁。作为中高级Android开发者&#xff…...

CANOE实战:基于SOME/IP的以太网通信仿真与配置详解

1. 认识SOME/IP与CANoe的基础组合 第一次接触汽车以太网通信时,我被SOME/IP这个协议名称吸引了注意力。它全称是Scalable service-Oriented MiddlewarE over IP,简单理解就是跑在以太网上的"服务型"通信协议。和传统CAN总线最大的不同在于&…...

PyTorch自定义损失超简单

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 PyTorch自定义损失函数:轻松实现的秘诀目录PyTorch自定义损失函数:轻松实现的秘诀 引言:打破…...

C++零基础到工程实战(4.2):while循环流程控制与条件表达式实战——使用system和cin实现支持ls的Shell

目录 一、本节学习内容概要图 二、前言 三、while 循环的基本逻辑与执行流程 3.1 while 的基本语法 3.2 while 和 for 的区别 四、while 中的 break、continue 与表达式条件 4.1 break:立即结束整个循环 4.2 continue:跳过本次,进入下…...

杭州专业WordPress模板开发服务商

模板号(mubanhao)是杭州地区知名的WordPress模板开发服务商,专注于为企业提供高品质的WordPress网站模板解决方案。作为长三角地区领先的网站建设服务提供商,模板号凭借多年的技术积累和行业深耕,已成为众多企业数字化转型道路上值得信赖的合…...

LightOnOCR-2-1B手把手教学:从零开始,打造你的智能文字提取工具

LightOnOCR-2-1B手把手教学:从零开始,打造你的智能文字提取工具 1. 为什么选择LightOnOCR-2-1B 在日常工作和学习中,我们经常需要从图片中提取文字内容。无论是扫描的文档、手机拍摄的笔记,还是网上下载的图片资料,手…...

Phi-4-mini-reasoning企业实操:金融风控规则推理引擎构建案例

Phi-4-mini-reasoning企业实操:金融风控规则推理引擎构建案例 1. 项目背景与模型介绍 Phi-4-mini-reasoning是微软推出的3.8B参数轻量级开源模型,专为数学推理、逻辑推导和多步解题等强逻辑任务设计。该模型主打"小参数、强推理、长上下文、低延迟…...

DAMO-YOLO TinyNAS保姆级教学:EagleEye日志分析、错误排查与常见报错解决方案

DAMO-YOLO TinyNAS保姆级教学:EagleEye日志分析、错误排查与常见报错解决方案 你是不是刚部署好DAMO-YOLO TinyNAS的EagleEye项目,满心欢喜准备体验毫秒级目标检测,结果一运行就遇到各种报错,看着满屏的日志信息一头雾水&#xf…...

忍者像素绘卷开源可部署:支持国产操作系统(OpenEuler)的兼容方案

忍者像素绘卷开源可部署:支持国产操作系统(OpenEuler)的兼容方案 1. 项目概述 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工作站,专为像素艺术创作而设计。这款工具将传统漫画创作与现代AI技术相结合,创…...

gma中计算CWDI(作物水分亏缺指数)的源代码

这次是干货 作物水分亏缺指数 作物水分亏缺指数(Crop Water Deficit Index,CWDI,%)从农田水分平衡出发,引入了作物系数,考虑了作物需水特性,能很好好的反应作物缺水状况。计算公式如下&#xff…...

手把手教你用IndexTTS-2-LLM:快速搭建多语种语音合成服务

手把手教你用IndexTTS-2-LLM:快速搭建多语种语音合成服务 1. 引言:为什么选择IndexTTS-2-LLM 语音合成技术正在改变我们与数字世界的交互方式。想象一下,你的应用能够用自然流畅的声音朗读任何文本,无论是中文新闻还是英文报告&…...

UDOP-large入门指南:零基础部署,快速实现英文文档智能理解

UDOP-large入门指南:零基础部署,快速实现英文文档智能理解 1. UDOP-large简介:你的英文文档智能助手 Microsoft UDOP-large是微软研究院开发的通用文档处理模型,专门用于理解和分析英文文档。这个模型结合了视觉理解和文本理解能…...

零代码操作:SiameseAOE中文观点抽取Web界面使用指南

零代码操作:SiameseAOE中文观点抽取Web界面使用指南 1. 认识SiameseAOE观点抽取工具 观点抽取是自然语言处理中的一项实用技术,它能从文本中自动识别出人们对事物的评价和看法。想象一下,当你面对成千上万条商品评论时,手动阅读…...

创建 Django 应用指南

安装 Django确保 Python 已安装在系统中,推荐使用 Python 3.8 或更高版本。 通过 pip 安装 Django:pip install django验证安装是否成功:django-admin --version创建项目使用以下命令创建一个新的 Django 项目:django-admin start…...

小白友好!Llama-3.2V-11B-cot快速入门:上传图片提问,看AI推理全过程

小白友好!Llama-3.2V-11B-cot快速入门:上传图片提问,看AI推理全过程 1. 引言:像聊天一样使用AI视觉推理 想象一下,你手头有一张图片——可能是旅游时拍的风景照,或是工作中遇到的图表,又或是孩…...

AI股票分析师场景应用:快速搭建本地化金融分析工具全流程

AI股票分析师场景应用:快速搭建本地化金融分析工具全流程 1. 引言:金融分析的智能化转型 在金融投资领域,及时获取专业分析报告是做出投资决策的关键。传统方式需要依赖券商研究报告或付费咨询,不仅成本高昂,还存在隐…...

FlashAttention优化技巧:从矩阵分块到IO感知计算

1. FlashAttention的核心优化原理 FlashAttention之所以能成为大模型训练的标准配置,关键在于它解决了传统注意力机制的两个致命问题:显存访问效率低下和计算资源浪费。想象一下,你正在用一台老式电脑处理超大Excel表格,每次只能查…...

大模型在多核CPU上的推理优化:线程亲和性与NUMA感知

一台 128 核的服务器,跑大模型推理的吞吐量却不如 32 核机器——这种情况在实际工程中并不罕见。根本原因往往不是核数不够,而是线程之间的"沟通成本"太高,以及内存访问路径不对。 本篇聚焦两个关键优化方向:线程亲和性…...

DIC vs 传统方法:铜铝复层材料应变测量全对比(附实测数据)

DIC技术与传统应变测量方法在铜铝复层材料测试中的深度对比 铜铝复层材料因其优异的导电性、导热性和机械性能,在电子、航空航天等领域应用广泛。然而,这类材料的应变测量一直是科研人员和工程师面临的挑战。传统的引伸计和应变电测方法虽然成熟&#x…...

协议层延迟骤增87%?揭秘AIAgent微服务间通信协议设计的4层降本增效架构实践,今天不看明天宕机

第一章:AIAgent架构中的通信协议设计 2026奇点智能技术大会(https://ml-summit.org) 在多智能体协同系统中,通信协议是决定Agent间语义对齐、时序可控与容错能力的核心基础设施。不同于传统微服务间RESTful或gRPC调用,AIAgent需支持异步事件…...

AIAgent目标分解到底难在哪?5大认知陷阱正在拖垮你的智能体落地进度

第一章:AIAgent目标分解到底难在哪?5大认知陷阱正在拖垮你的智能体落地进度 2026奇点智能技术大会(https://ml-summit.org) 目标分解是AI Agent架构设计的“第一道闸门”,却也是最常被轻率跨过的雷区。当团队将“用户订机票”直接拆解为“调…...

AIAgent记忆泄漏正在 silently 拖垮你的O1推理成本——从Python GC钩子到WASM沙箱隔离的3层防御体系

第一章:AIAgent架构中的记忆机制设计 2026奇点智能技术大会(https://ml-summit.org) AI Agent 的长期有效性高度依赖其记忆系统——它不仅是信息暂存的“缓存”,更是支撑推理连贯性、任务持续性与自我演化的认知基座。现代 AIAgent 架构普遍采用分层记忆…...

AI写的AI写小说软件

星灿AI小说写作助手 是一款专为网络小说创作者设计的智能写作工具,集成了AI辅助创作、小说管理、章节编辑等功能,帮助作者高效完成小说创作。 核心功能: - 书架管理:创建、管理多部小说,支持导出TXT格式 - 章节编辑&am…...

霸州发到佛山海运发货流程

霸州到佛山船运物流时效,霸州发到佛山海运运输多久,霸州到佛山货柜水运发货流程 霸州到佛山的船运物流,因需结合陆运完成两端接驳,整体时效受海运航程、陆运调度及港口作业效率等多因素影响。而船运需先将货物从霸州陆运至天津港&…...

python rioxarray

# 聊聊Python里的rioxarray:当遥感数据遇上xarray 最近在处理一些地理空间数据时,又用到了rioxarray这个库。说实话,第一次接触它的时候,觉得这不过又是一个处理栅格数据的工具罢了。但用久了才发现,它解决了一些实际工…...