C ++父类对齐

时间:2010-05-01 17:11:13

标签: c++ inheritance alignment

是否可以指定父类的对齐方式? 例如(没有编译)的东西:

template<size_t n>
class Vector : public boost::array<double,n> __attribute__ ((aligned(16)))
{

感谢

嗯,从我收集的评论来看,这不是一个好方法。 我想我会坚持使用私有数组的组合/对齐

2 个答案:

答案 0 :(得分:5)

我们不需要在派生类上请求对齐。我们不需要的原因是它足以请求派生类的对齐,并且请求与派生类对齐将导致基类的布局依赖于派生。

class A : public C __attribute__ ((aligned(16)))
{


class B : public C __attribute__ ((aligned(8)))
{

哪个将与C对齐?

答案 1 :(得分:2)

GCC保证第一个基类在派生类布局中偏移零。因此,在这种情况下,对齐派生对象就足够了。

我目前无法找到一个好的参考,但请参阅-wABI下的here,其中描述了未声明规则的例外情况:如果基数为空,则可能不是偏移零。

如果第一个基础缺少vtable但派生对象有一个,我想会有另一个例外。 array属于那个类别,我会留意。当然,标准没有规定布局:§10/ 3。