有一个现有的question,需要C ++ 03并且没有答案,所以我将打开一个新的答案。
我遇到的问题是我想拥有std::vector
中的std::byte
,但是要使.data()
(数据数组的第一个元素)是16字节对齐的。
alignas
没有帮助,因为我不想在数组中有对齐间隙。
换句话说,我要使元素的对齐方式保持1,但是我要使数组的对齐方式保持16。
理想情况下,我想避免使用自定义分配器。 如果有任何TBB或boost矢量可以满足我的要求,那也很棒。
答案 0 :(得分:4)
默认情况下,未按矢量对齐数据。甚至没有统一的班级。
进行对齐的最佳方法是使用aligned_allocator增强。
不幸的是,它不能防止填充,它甚至可以使指针适应路线。从C ++ 17开始,它可以使用aligned new(请参见std::aligned_val_t
重载)。但是,我见过的所有实现实际上都使用相同的技巧。
另一种选择是一次分配整个页面,然后使用自定义分配器进行自己的内存管理。您可以做到,尽管可能需要很多时间才能正确完成。