如何创建 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::byte
的 std::vector
,但是 .data()
(数据数组的第一个元素)是 16 字节对齐的。
alignas
对包装的 char 没有帮助,因为我不想在数组中有对齐间隙。
换句话说,我希望元素的对齐方式为 1,但我希望数组的对齐方式为 16。
理想情况下,我想避免使用自定义分配器。
如果有任何 TBB 或升压向量可以满足我的要求,那也很棒。
默认情况下不提供对齐向量中的数据。甚至不对齐 类.
最好的对齐方式是使用 boost 的 aligned_allocator。
不幸的是,它并没有阻止填充,它甚至过度分配以适应对齐上的指针。从 C++17 开始,它可以使用 aligned new(参见 std::aligned_val_t
重载)。然而,我见过的所有实现实际上都使用了相同的技巧。
另一种方法是一次分配整个页面,然后使用自定义分配器进行您自己的内存管理。你可以做到,虽然可能需要很多时间才能正确完成。
已有question需要C++03,没有答案,我再开一个
我遇到的问题是我想要 std::byte
的 std::vector
,但是 .data()
(数据数组的第一个元素)是 16 字节对齐的。
alignas
对包装的 char 没有帮助,因为我不想在数组中有对齐间隙。
换句话说,我希望元素的对齐方式为 1,但我希望数组的对齐方式为 16。
理想情况下,我想避免使用自定义分配器。 如果有任何 TBB 或升压向量可以满足我的要求,那也很棒。
默认情况下不提供对齐向量中的数据。甚至不对齐 类.
最好的对齐方式是使用 boost 的 aligned_allocator。
不幸的是,它并没有阻止填充,它甚至过度分配以适应对齐上的指针。从 C++17 开始,它可以使用 aligned new(参见 std::aligned_val_t
重载)。然而,我见过的所有实现实际上都使用了相同的技巧。
另一种方法是一次分配整个页面,然后使用自定义分配器进行您自己的内存管理。你可以做到,虽然可能需要很多时间才能正确完成。