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

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

已有question需要C++03,没有答案,我再开一个

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

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

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

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

最好的对齐方式是使用 boost 的 aligned_allocator

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

另一种方法是一次分配整个页面,然后使用自定义分配器进行您自己的内存管理。你可以做到,虽然可能需要很多时间才能正确完成。