C`std :: string`-like容器,带有4字节对齐的缓冲区

我需要一个C中的数据结构,它像一个标准的字节容器,但是以四个字节的倍数对齐缓冲区.我想尽可能多地重用标准库抽象,而不是滚动我自己的抽象.

到现在为止,我一直在使用std :: string和std :: vector< std :: uint8_t>以此目的.不幸的是,我已经在最新的Mac OS上得到了错误报告,其中显然string :: data()不再是4字节对齐,而是在一个地址与1 mod 4一致.我一见到这一点,我实现当然没有在规范中保证字符串将是4字节对齐.我可以切换到vector< char>,但不幸的是现在我不确定为什么这应该是4字节对齐.即使使用自定义分配器,矢量实现也可能在它分配的缓冲区的开头做一些奇怪的事情.

我的问题:从C标准库中获取动态大小的单字节对象容器的简单方法是什么,其中第一个字节位于4字节对齐的地址,单个字节可以通过operator []访问?

请注意,这与询问如何确保容器使用的分配器返回4字节对齐的内存不同.例如,std :: string仍然分配4字节对齐的内存(实际上可能是8),它只是在Mac OS上的字符串:: data()不指向分配的缓冲区的开始.我在规范中没有看到任何会阻止向量< char>的内容从做同样的事情,即使现在似乎工作.

最佳答案 其中一个解决方案是使用std :: vector< uint32_t>在内部,封装它并在使用时将data()转换为unsigned char *.

点赞