c++ - clang 空基类优化 (EBCO)

标签 c++ class optimization clang radix

<分区>

在这种情况下,Clang 似乎没有做空基类优化:

struct A { };                          //sizeof(A) == 1 -> OK
struct B : public A { int _intValue; };//sizeof(B) == 4 -> OK, EBCO works here
struct C : public A { B _bValue; };    //sizeof(C) == 8 -> ??? Not OK

似乎 g++ 的行为方式相同(或相似)。这是正常的吗?我认为 EBCO 应该在这里发挥作用。

我是否遗漏了一些会使其在这里成为非法的东西?

最佳答案

对我来说,不同之处在于

&B == &(B._intValue)

对比

&C != &(C._bValue._intValue)

因为 &(instance of C) == &(instance of B) 应该是无效的,而 &(instance of B) == &first member of (instance of B) 在(B 的实例)的第一个成员是基本类型(char、int、...)的情况下有效。

我认为这与 EBCO 没有任何关系。

关于c++ - clang 空基类优化 (EBCO),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17842720/

相关文章:

c++ - Windows:直接读取另一个进程的内存

c++ - 如何在 C++ 中启动另一个程序而不必等待它?

python - 返回修改后的类和使用 type() 的区别

c# - 将自定义类的数组存储在设置文件中

c++ - 在C++中,是否为派生类创建了一组新的私有(private)变量?

c++ - 使用循环将字符串拆分为特定长度的子单元

c++ - 作为指针传递的函数内部赋值?

optimization - Tomcat Web 服务器的最佳设置是什么?

c++ - 优化重复系数评估

python - Matlab 的 fminimax 是否适用帕累托最优?