我打算使用std::string
作为通用数据缓冲区(而不是我自己的滚动)。我需要将各种POD打包到其中,包括用户定义的结构,std::string
分配的内存缓冲区是否为此目的正确对齐?
如果在C ++标准中未指定,那么libstdc ++中的情况是什么?
主机CPU是x86_64。
答案 0 :(得分:3)
首先,std::string
可能不是最好的容器,如果你想要做的是存储任意数据。我建议改用std::vector
。
其次,容器所做的所有分配的对齐由其分配器控制(第二个模板参数,默认为std::allocator<T>
)。默认分配器将根据最大标准类型的大小对齐分配,该类型通常为long long
或long double
,分别为我的计算机上的8和16字节,但这些类型的大小不是由标准。
如果你想要一个特定的对齐方式,你应该通过提供自己的分配器或使用std::aligned_storage
来检查编译器对齐的内容,或者明确要求对齐。