Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
有一个现有的问题需要 C++03 并且没有答案,所以我将打开一个新问题。
我遇到的问题是我想要std::vectorof std::byte,但是.data()(数据数组的第一个元素)是 16 字节对齐的。
std::vector
std::byte
.data()
alignason Wrapped char 没有帮助,因为我不想在数组中有对齐间隙。换句话说,我想将元素对齐为 1,但我希望数组对齐为 16。
alignas
理想情况下,我想避免使用自定义分配器。如果有任何 TBB 或增强向量可以满足我的要求,那也很棒。
默认情况下不提供对齐向量中的数据。甚至对于对齐的课程也不行。
最好的对齐方式是使用boost的对齐分配器。
不幸的是,它并不能防止填充,它甚至会过度分配以适应对齐上的指针。从 C++17 开始,它可以使用对齐的新(参见std::aligned_val_t重载)。但是,我见过的所有实现实际上都使用了相同的技巧。
std::aligned_val_t
另一种方法是一次分配整个页面,并使用自定义分配器进行自己的内存管理。你可以做到,尽管正确地做到这一点可能需要很多时间。