我正在阅读有关空基优化(EBO)的内容.在阅读时,我脑海中浮现出以下问题:
当对类派生类没有任何贡献时(无论是功能方面还是数据方面),使用Empty类作为基类有什么意义?
在本文中,我读到了这个:
// S是空
类struct T:S
{
int x;
};[...]
请注意,我们没有丢失任何数据或代码准确性:当您创建S类型的独立对象时,对象的大小仍然是之前的1(或更多); 只有当S被用作另一个类的基类时,它的内存占用量才会缩小到零.为了实现这种节省的影响,想象一个包含125,000个对象的向量.仅EBO就可以节省半兆内存!
这是否意味着如果我们不使用"S"作为"T"的基类,我们必然会消耗两倍的兆字节内存?我认为,这篇文章比较了我认为不正确的两种不同情景.
我想知道一个真实的情景时,EBO可以证明是有用的.(手段,在相同的情况下,我们就一定是在亏损,如果我们不使用EBO!).
整点是一个空类的大小非零,但是当派生或派生时它的大小为零,那么我就不会问这个,正如我所知道的那样.我的问题是,为什么有人会从一个空洞的班级中获得他的班级?即使他没有衍生出来并简单地写出他的课程(没有任何空基础),他是否会以任何方式迷失?
c++ optimization memory-management class compiler-optimization
只是出于好奇,如果我有一个带有位字段的结构
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)