相关疑难解决方法(0)

程序员何时使用空基优化(EBO)

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

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

  2. 本文中,我读到了这个:

// S是空
类struct T:S
{
      int x;
};

[...]

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

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

我想知道一个真实的情景时,EBO可以证明是有用的.(手段,在相同的情况下,我们就一定是在亏损,如果我们不使用EBO!).

请注意,如果您的答案包含以下解释:

整点是一个空类的大小非零,但是当派生或派生时它的大小为零,那么我就不会问这个,正如我所知道的那样.我的问题是,为什么有人会从一个空洞的班级中获得他的班级?即使他没有衍生出来并简单地写出他的课程(没有任何空基础),他是否会以任何方式迷失?

c++ optimization memory-management class compiler-optimization

19
推荐指数
4
解决办法
5671
查看次数

C++ 合并位域吗?

只是出于好奇,如果我有一个带有位字段的结构

struct Foo
{
    char a : 1;
    char b : 1;
    char c : 1;
}
Run Code Online (Sandbox Code Playgroud)

另一个带有位域和 struct Foo 的结构

struct Bar
{
    Foo foo;

    char a : 1;
    char b : 1;
    char c : 1;
}
Run Code Online (Sandbox Code Playgroud)

所有这些位都会被打包成一个整数吗?

在这种情况下,这些字段是否会被重新排序以形成单个位字段?

struct Baz
{
    char a : 1;

    int NotBitfield;

    char b : 1;
    char c : 1;
}
Run Code Online (Sandbox Code Playgroud)

c++ bit-fields

8
推荐指数
1
解决办法
184
查看次数