clang空基类优化(EBCO)

时间:2013-07-24 19:05:05

标签: c++ class optimization clang base

在这种情况下,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应该来这里。

我是否遗漏了一些会使其在此非法的内容?

2 个答案:

答案 0 :(得分:0)

对我而言,差异似乎来自

这一事实
&B == &(B._intValue)

VS

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

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

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

答案 1 :(得分:0)

在我看来,clang正在调整到4个字节,因为这可能是您平台上的最佳内存访问。你是如何编译该代码的?