是否可以指定父类的对齐方式? 例如(没有编译)的东西:
template<size_t n>
class Vector : public boost::array<double,n> __attribute__ ((aligned(16)))
{
感谢
嗯,从我收集的评论来看,这不是一个好方法。 我想我会坚持使用私有数组的组合/对齐
答案 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。