C++ 如何创建char/std::byte的std::vector,其中第一个字节与16个“是”对齐,但没有填充?

C++ 如何创建char/std::byte的std::vector,其中第一个字节与16个“是”对齐,但没有填充?,c++,alignment,alignas,C++,Alignment,Alignas,有一个现有的需要C++03并且没有答案,所以我将打开一个新的 我所遇到的问题是,我希望使用std::byte的std::vector,但是.data()(数据数组的第一个元素)是16字节对齐的 包装字符上的alignas没有帮助,因为我不希望数组中有对齐间隙。 换句话说,我想让元素对齐1,但数组对齐16 理想情况下,我希望避免使用自定义分配器。 如果有任何TBB或boost向量可以满足我的要求,那也太好了。默认情况下不提供向量中的数据对齐。甚至对于对齐的类也是如此 最好的对齐方式是使用boost

有一个现有的需要C++03并且没有答案,所以我将打开一个新的

我所遇到的问题是,我希望使用
std::byte
std::vector
,但是
.data()
(数据数组的第一个元素)是16字节对齐的

包装字符上的
alignas
没有帮助,因为我不希望数组中有对齐间隙。 换句话说,我想让元素对齐1,但数组对齐16

理想情况下,我希望避免使用自定义分配器。
如果有任何TBB或boost向量可以满足我的要求,那也太好了。

默认情况下不提供向量中的数据对齐。甚至对于对齐的类也是如此

最好的对齐方式是使用boost

不幸的是,它不能阻止填充,甚至会过度分配以适应对齐上的指针。在C++17中,可以使用它(请参见
std::aligned\u val\t
重载)。然而,我看到的所有实现实际上都使用相同的技巧


另一种方法是一次分配整个页面,并使用自定义分配器进行自己的内存管理。您可以这样做,但正确操作可能需要很多时间。

std::vector
alignas(16)std::byte
包装到一个类中如何?在最大本机对齐为16或更大的平台上,如果使用默认分配器,您不需要做任何特殊的操作。@user463035818 OK,但我的意思是,可能有一个C++11解决方案,没有人发布它来回答这个问题:啊,好吧,你的意思是“需要C++03”,意思是“其他问题需要C++03,但没有更高的标准”,对不起,误解了。点击:你应该提供指向对齐新的链接,因为这对谷歌来说相当棘手,我想你是指使用std::align\u val\t的重载?是的,我会添加它