0
考虑下面的代码:如何在结构内部对齐__m256d?
// Thin/POD struct
struct Data {
__m256d a;
__m256d b;
};
// Thick base class
class Base {
// ...
};
// Thick derived class
class Derived : public Base {
Data data;
// ...
};
有没有一种方法,以确保Derived::data
成员是AVX(32字节对齐)正确对齐? 因为派生类有一个基础,所以似乎没有办法像class alignas(32) Derived
和data
作为Derived
的第一个成员。
Derived
当前仅在堆栈上分配,但也可能以后需要堆分配。
更新:编译器是MSVC++ 2017,因此(部分)支持C++ 11/14/17。
据我所知,对齐约束从单个字段传播到包含它们的聚合。因此,'__m256d'字段的对齐约束应该传播到'Data'结构,然后再传播到'Derived'结构。但是你可以通过'alignas(__ m256d)'明确地标注'Data'字段来对齐数据(或者,如果你没有C++ 11的支持,无论你使用的编译器的语法如何) 。 –
您是否注意到任何错位?它应该自动工作,可能会在对象中间留下填充空间。动态分配是另一回事,显然VC++不支持“过度对齐的动态内存分配”。 –
@MarcGlisse,不,我还没有发现任何错位。但是我想在发生之前知道潜在的错误。你能指出一些有关MSVC++的(非)支持“过度对齐动态内存分配”的链接吗?我无法在互联网上找到它,除了通用的http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0035r1.html –