std::string 和数据对齐

std::string and data alignment

我打算使用 std::string 作为通用数据缓冲区(而不是自己滚动)。我需要将各种 POD 打包到其中,包括用户定义的结构,由 std::string 分配的内存缓冲区是否为此目的正确对齐?

如果在C++标准中没有规定,libstdc++中是什么情况?

主持人CPU是x86_64。

首先,如果您想存储任意数据,std::string 可能不是最好的容器。我建议改用 std::vector

其次,容器所做的所有分配的对齐由其分配器控制(第二个模板参数,默认为std::allocator<T>)。默认分配器将根据最大标准类型的大小对齐分配,在我的机器上通常是 long longlong double,分别是 8 字节和 16 字节,但是这些类型的大小不是由标准。

如果你想要一个特定的对齐,你应该检查你的编译器对齐的内容,或者通过提供你自己的分配器或使用 std::aligned_storage.

来明确要求对齐