gpt4 book ai didi

具有 4 字节对齐缓冲区的 C++ `std::string` 类容器

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:14:34 24 4
gpt4 key购买 nike

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

到目前为止,我一直在使用 std::stringstd::vector<std::uint8_t> 来达到这个目的。不幸的是,我收到了有关最新 Mac OS 的错误报告,显然 string::data() 不再是 4 字节对齐的,而是地址与 1 mod 4 一致。当我看到这个时,我当然没有意识到规范保证字符串将按 4 字节对齐。我可以切换到 vector<char> ,但不幸的是现在我不确定为什么这应该是 4 字节对齐的。即使使用自定义分配器,vector 实现也可能在它分配的缓冲区开始时做一些奇怪的事情。

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

请注意,这与询问如何确保容器使用的分配器返回 4 字节对齐的内存不同。例如,std::string 仍然分配 4 字节对齐的内存(实际上可能是 8 个),只是在 Mac OS 上 string::data() 没有指向分配缓冲区的开始。我在规范中看不到任何可以阻止 vector<char> 执行相同操作的内容,尽管目前这似乎可行。

最佳答案

解决方案之一是使用 std::vector<uint32_t>在内部,封装并转换 data()unsigned char *当你使用它时。

关于具有 4 字节对齐缓冲区的 C++ `std::string` 类容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48693559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com