如何创建 std::vector of char/std::byte,其中第一个字节对齐到 16 个字节,但没有填充

How to create std::vector of char/std::byte where first byte is aligned to 16 byes, but there is no padding?

本文关键字:字节 std 对齐 第一个 填充 byte 创建 何创建 vector char of      更新时间:2023-10-16

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

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

在包装的字符上alignas无济于事,因为我不想在数组中出现对齐间隙。换句话说,我想对元素进行 1 的对齐,但我希望数组的对齐方式为 16。

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

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

进行对齐的最佳方法是使用提升aligned_allocator。

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

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