4

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

我遇到的问题是我想要std::vectorof std::byte,但是.data()(数据数组的第一个元素)是 16 字节对齐的。

alignason Wrapped char 没有帮助,因为我不想在数组中有对齐间隙。换句话说,我想将元素对齐为 1,但我希望数组对齐为 16。

理想情况下,我想避免使用自定义分配器。如果有任何 TBB 或增强向量可以满足我的要求,那也很棒。

4

1 回答 1

4

默认情况下不提供对齐向量中的数据。甚至对于对齐的课程也不行。

最好的对齐方式是使用boost的对齐分配器。

不幸的是,它并不能防止填充,它甚至会过度分配以适应对齐上的指针。从 C++17 开始,它可以使用对齐的新(参见std::aligned_val_t重载)。但是,我见过的所有实现实际上都使用了相同的技巧。

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

于 2019-01-25T12:27:29.910 回答