gpt4 book ai didi

c++ - 在未对齐的内存上重新解释_cast

转载 作者:可可西里 更新时间:2023-11-01 16:19:28 28 4
gpt4 key购买 nike

假设以下代码:

struct A
{
int a;
int b;
};

char* buffer = receivedFromSomeWhere();

A a = *reinterpret_cast<A*>(buffer + 1);

如果 buffer + 0int 的大小上对齐,buffer + 1 很可能在未对齐的内存上。默认复制构造函数可能会愉快地复制两个未对齐的 int 成员 ab。在 x86/x64 架构上,除了减慢代码速度外,它是否会以任何讨厌的方式影响 a 的复制构造?

我知道一个好的序列化可以解决未对齐的内存问题(通过在某处添加一个填充以使 A 结构在 buffer 中对齐),但就我而言,我不对这部分负责。

最佳答案

C++ 和使用 x86_64 架构的组合不足以保证支持未对齐的访问。您必须从特定的 C++ 实现中获得额外保证,即支持以这种方式使用 reinterpret_cast,即使地址未对齐也是如此。如果您声明了您的特定编译器和目标系统,有人可能会告诉您它是否支持这些操作。

如果没有这样的保证,您可以使用memcpy 将字节从未对齐的缓冲区复制到 POD(普通旧数据)对象中。一个好的编译器可以优化此类访问。

关于c++ - 在未对齐的内存上重新解释_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18128701/

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