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

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

概述我需要一个C中的数据结构,它像一个标准的字节容器,但是以四个字节的倍数对齐缓冲区.我想尽可能多地重用标准库抽象,而不是滚动我自己的抽象. 到现在为止,我一直在使用std :: string和std :: vector< std :: uint8_t>以此目的.不幸的是,我已经在最新的Mac OS上得到了错误报告,其中显然string :: data()不再是4字节对齐,而是在一个地址与1 mod 我需要一个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 *. 总结

以上是内存溢出为你收集整理的C`std :: string`-like容器,带有4字节对齐的缓冲区全部内容,希望文章能够帮你解决C`std :: string`-like容器,带有4字节对齐的缓冲区所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1229045.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存