网站建设宣传册wordpress背景动画

张小明 2026/1/10 9:28:50
网站建设宣传册,wordpress背景动画,网站做二级站,免费私人网站《你真的了解C吗》No.017#xff1a;零大小对象与空基类优化——消失的字节 导言#xff1a;虚无的重量 在直觉上#xff0c;一个没有任何数据成员、没有虚函数的空类#xff08;Empty Class#xff09;#xff0c;其大小应该是 0。然而#xff0c;如果你在 C 中执行 si…《你真的了解C吗》No.017零大小对象与空基类优化——消失的字节导言虚无的重量在直觉上一个没有任何数据成员、没有虚函数的空类Empty Class其大小应该是0。然而如果你在 C 中执行sizeof(EmptyClass)你会惊讶地发现结果通常是1。为什么“空”也有重量这 1 个字节是从哪儿来的而在继承体系中这个字节又是如何神秘“消失”的本章将带你揭开空基类优化EBO的秘密。一、 为什么空类的大小不是 0C 标准规定任何独立Standalone对象的大小至少为 1 字节。理由很简单为了确保同一个类的不同对象在内存中拥有唯一的地址。想象一下如果空类的大小是 0classEmpty{};Empty a,b;if(ab){/* 它们是同一个对象吗 */}如果大小为 0a和b的地址就会重叠。当你在数组中存放这些对象时ptr将永远停留在原地。为了让new返回唯一的指针编译器必须为每个空类对象安插一个“占位符”字节。二、 空基类优化EBO / EBCO空间的魔术虽然独立对象不能是 0 字节但当一个类作为基类存在时情况就不同了。空基类优化Empty Base Optimization允许派生类在继承空基类时不为那个占位符字节分配空间。1. 物理布局的对比非优化情况组合关系如果你在一个类里包含一个空类成员编译器为了保证成员地址唯一必须保留那 1 字节由于内存对齐甚至可能膨胀到 4 或 8 字节。优化情况继承关系如果你继承自一个空类编译器会认为基类只是提供了一个“接口”或“类型标签”它不需要独立的地址。classEmpty{};// 大小 1// 情况 A组合 (Composition)classHolder{Empty e;// 占用 1 字节inta;// 占用 4 字节};// sizeof(Holder) 通常是 8 (由于对齐)// 情况 B继承 (Inheritance) - 触发 EBOclassDerived:publicEmpty{inta;// 占用 4 字节};// sizeof(Derived) 通常是 4那个 1 字节消失了。三、 为什么 EBO 在底层开发中如此重要你可能会觉得省下 1 到 4 个字节有什么大不了的但在泛型编程如 STL中EBO 是极致性能的关键。典型应用std::vector的分配器std::vector通常持有一个分配器对象Allocator。大多数分配器是没有任何状态的空类。如果vector使用组合方式持有分配器每个vector对象都会白白增大若干字节。如果vector的内部实现巧妙地继承自分配器利用 EBO分配器的空间开销就变成了0。四、 EBO 失效的时刻EBO 并不是万能的。有一种情况会导致它失效当派生类的第一个非静态成员变量的类型恰好也是这个空基类时。classEmpty{};classBogus:publicEmpty{Empty e;// 第一个成员也是 Emptyinta;};为了保证基类Empty的地址和成员e的地址不同编译器此时必须为基类分配空间。在这种布局下sizeof(Bogus)会再次变大。五、 C20 的新方案[[no_unique_address]]在 C20 之前为了利用 EBO开发者不得不强行使用“继承”来代替“组合”这破坏了对象设计的语义有时明明不是 Is-a 关系却要写成继承。C20 引入了属性标签让组合也能享受 EBOstructHolder{[[no_unique_address]]Empty e;// 告诉编译器如果不必要别给它分配地址inta;};// sizeof(Holder) 为 4总结空间的艺术独立空类必须占 1 字节以保证地址唯一。空基类可以被优化为 0 字节只要不产生地址冲突。EBO是 C 程序员在不破坏抽象的前提下压榨内存空间的优雅手段。下一篇预告聊完了空间的“消失”我们要聊聊代码的“生成”。在 C 中如果你不写某些函数编译器会替你写但它写出来的东西真的是你想要的吗➡️《你真的了解C吗》No.018复制操作的隐式生成规则——“大三原则”的底层逻辑。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

高淳网站建设色母粒

Android 12(API 31)引入了多项重要特性和行为变更,本文从开发视角梳理核心适配点,结合 Kotlin 代码示例说明具体实现方式。 一、核心适配前提 升级开发环境: Gradle 插件 ≥ 7.0.0compileSdkVersion ≥ 31targetSdkV…

张小明 2026/1/6 22:42:18 网站建设

有没有做字的网站网站平台怎么建立

Arduino IDE 2.0终极指南:嵌入式开发新体验 【免费下载链接】arduino-ide Arduino IDE 2.x 项目地址: https://gitcode.com/gh_mirrors/ar/arduino-ide Arduino IDE 2.0作为嵌入式开发领域的新一代集成开发环境,为初学者和开发者提供了前所未有的…

张小明 2026/1/6 0:46:33 网站建设

做品牌断码的网站深圳企业名录大全

智能图像增强工具:如何让模糊图片重获清晰细节? 【免费下载链接】cupscale Image Upscaling GUI based on ESRGAN 项目地址: https://gitcode.com/gh_mirrors/cu/cupscale Cupscale作为基于ESRGAN算法的图像超分辨率工具,为普通用户提…

张小明 2026/1/6 4:31:05 网站建设

刷题网站建设网站开发公司业务员培训

PaddlePaddle镜像如何帮助中小企业降低AI研发门槛 在今天的数字化浪潮中,越来越多的中小企业希望借助人工智能提升产品竞争力——无论是智能客服中的语义理解,还是生产线上对缺陷图像的自动识别。然而现实往往令人却步:明明只是想跑通一个OCR…

张小明 2026/1/6 7:21:49 网站建设

如何在外国网站卖东西平台营销策略

C# 矩阵运算类库 矩阵运算,求逆 。 欧拉角转换类库 。 24种欧拉角、四元数互相转换数学运算100%正确无措先看这个Matrix4x4类的核心结构: public class Matrix4x4 {private double[,] elements new double[4,4];public Matrix4x4 Inverse() {// 初始化…

张小明 2026/1/10 6:22:10 网站建设

做网站app优惠活动的张家界旅游网站建设

你是否曾面对一个神秘的Python打包EXE文件,却无法窥探其内部逻辑?无论是分析第三方工具、审计可疑程序,还是学习优秀代码实现,Python EXE Unpacker都能为你打开这扇紧闭的大门。这款专业工具让逆向工程变得简单高效,即…

张小明 2026/1/9 17:13:12 网站建设