std :: string和数据对齐

时间:2015-05-15 10:47:33

标签: c++ memory-alignment

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

如果在C ++标准中未指定,那么libstdc ++中的情况是什么?

主机CPU是x86_64。

1 个答案:

答案 0 :(得分:3)

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

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

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