【发布时间】:2017-04-06 20:43:50
【问题描述】:
假设我有类似的东西:
class C
{
private:
__m128i m0;
__m128i m1;
__m128i cm0;
int s0;
...
}
这可能会导致问题,因为不能保证 m0、m1 和 cm0 是 16 字节对齐的,允许与对齐相关的访问冲突。如果我绝对想拥有可以保证对齐的私有 simd 类成员,我应该怎么做?
编辑:特别是在我的情况下,我正在使用具有 __m128i 成员(除了 32 位和 64 位整数之外)的类的 std::vector。是否可以强制我的类成员在 16 字节内对齐一个 std::vector?
【问题讨论】:
-
保证类成员在本地或静态变量以及本地或静态数组中满足其对齐要求。如果您动态分配内存,您可能会遇到问题。我猜您正在尝试使用
std::vector<C>或类似名称?如果有,请说出来。 -
你是对的,我正在尝试使用像这样的类的向量。有什么建议吗?
-
如果不将整个类对齐到至少相同的值,您就无法“对齐成员”。否则,您可以通过类允许的对齐方式替换整个对象并破坏成员对齐方式。 (类布局当然是固定的,不是每个对象决定的。)
标签: c++ sse simd memory-alignment class-members