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 –