程序员什么时候使用空基优化(EBO)

When do programmers use Empty Base Optimization (EBO)(程序员什么时候使用空基优化(EBO))
本文介绍了程序员什么时候使用空基优化(EBO)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在阅读有关空基优化 (EBO) 的内容.在阅读的过程中,我的脑海中浮现出以下问题:

  1. 它对派生类没有任何贡献(无论是功能方面还是数据方面)时,使用 Empty 类作为基类有什么意义?

  2. 在 这篇文章,我读了这个:

<块引用>

//S为空
类结构 T : S
{
int x;
};

[...]

请注意,我们没有丢失任何数据或代码准确性:当您创建一个S 类型的独立对象,对象的大小仍然是 1(或更多)作为前;仅当 S 用作基数时另一个类的类做它的记忆足迹缩小到零.意识到这种节省的影响,想象一下包含 125,000 个的向量对象.仅 EBO 就可节省一半兆字节内存!

这是否意味着如果我们不使用S"作为T"的基类,我们必然会消耗两倍的内存吗?我认为,这篇文章比较了两种我认为不正确的不同场景.

我想知道当 EBO 被证明有用时的真实场景.(意思是,在同一场景中,如果我们不使用 EBO,我们必然会不知所措!).

请注意,如果您的回答包含这样的解释:

重点是一个空类的大小不为零,但是在派生或派生时它的大小可以为零,那么我不是问这个,因为我已经知道了.我的问题是,首先为什么有人会从一个空类派生他的类?即使他不派生并简单地编写他的类(没有任何空基),他是否有任何损失?

解决方案

EBO 在 基于策略的设计,您通常私下从多个策略类继承.如果我们以线程安全策略为例,可以想象伪代码:

class MTSafePolicy{民众:void lock() { mutex_.lock();}void unlock() { mutex_.unlock();}私人的:互斥互斥_;};类 MTUnsafePolicy{民众:void lock() {/* 无操作 *

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Rising edge interrupt triggering multiple times on STM32 Nucleo(在STM32 Nucleo上多次触发上升沿中断)
How to use va_list correctly in a sequence of wrapper functions calls?(如何在一系列包装函数调用中正确使用 va_list?)
OpenGL Perspective Projection Clipping Polygon with Vertex Outside Frustum = Wrong texture mapping?(OpenGL透视投影裁剪多边形,顶点在视锥外=错误的纹理映射?)
How does one properly deserialize a byte array back into an object in C++?(如何正确地将字节数组反序列化回 C++ 中的对象?)
What free tiniest flash file system could you advice for embedded system?(您可以为嵌入式系统推荐什么免费的最小闪存文件系统?)
Volatile member variables vs. volatile object?(易失性成员变量与易失性对象?)