假设一个类被声明为具有特定的对齐方式。而且我无法修改该基类。
#define ATTRIBUTE_ALIGNED16(a) __declspec(align(16)) a
ATTRIBUTE_ALIGNED16(class) btVector3
{};
class Vector3 : public btVector3
{};
是否有可能使派生类Vector3失去对齐?
在MSVC下,对齐非常有限,因为它阻止了传递值。我的派生类并不特别需要它,在模板编写中,使用可以通过值传递的类很方便。
答案 0 :(得分:2)
小心 - 如果btVector3来自Bullet物理库(其中bt是其数学函数的前缀),则由于SIMD数学函数,btVector3与16字节边界对齐。此外,btVector3被定义为4个浮点数和128位类型的并集,在大多数环境中需要16字节对齐。见http://bulletphysics.org/Bullet/BulletFull/btVector3_8h_source.html
尝试使用没有对齐要求的数学库会导致某些操作失败,并且您的方法以未定义的方式操作。最好与对齐一起生活,或找到不同的库。