到现在为止,我一直在使用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 *. 总结以上是内存溢出为你收集整理的C`std :: string`-like容器,带有4字节对齐的缓冲区全部内容,希望文章能够帮你解决C`std :: string`-like容器,带有4字节对齐的缓冲区所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)