【发布时间】:2019-01-11 20:26:22
【问题描述】:
我想知道使用现代 C++11 定义具有内存对齐附加功能的 std::array 类型的最佳方法。我知道alignas 不能与类型别名一起使用,但这是我想要做的精神:
template<class T, std::size_t N, std::size_t A>
using AlignedArray = alignas(A) std::array<T, N>;
可以像这样即时化:
AlignedArray<int8_t, 4, 32> MyArray;
我能想到的最好的工作版本是这样的:
template<class T, std::size_t N, std::size_t A>
struct alignas(A) AlignedArray : std::array<T, N> {
using std::array<T, N>::array;
};
任何人都可以提出更简单或更好的建议吗?我是内存对齐问题的新手,所以任何建议都将不胜感激。
正如前面的问题所述,您当然可以这样做:
alignas(32) std::array<int8_t, 4> MyArray;
但这并没有定义可重用的类型,所以它不是我在这个问题中寻找的。p>
【问题讨论】:
-
虽然
std::array已经保证它的元素的对齐方式是正确的,但我会认为它是正确的。 -
可能重复:stackoverflow.com/questions/39058850/… 虽然我不确定这是否是您要问的。
-
@FrançoisAndrieux,也许吧?但我可能需要一个更大的对齐大小,然后才能保证,请参阅示例。
-
@RSahu 这显示了在声明对齐变量时如何覆盖类型的对齐。 atb 要求对齐类型。
-
您要对齐数组还是数组的元素?不是一回事……