gpt4 book ai didi

c++ - 存储对齐数据非对齐

转载 作者:行者123 更新时间:2023-11-28 05:33:36 26 4
gpt4 key购买 nike

假设我有一个类 T和一个数组:

uint8_t array[sizeof(T)];

需要注意的一件事是 array可能具有与 T 不兼容的对齐方式.

现在的问题是:有没有办法存储 T在数组中(尽管存在对齐问题),前提是我们不尝试对 T 做任何事情, 直到我们将它从数组复制到正确对齐的存储空间?

换句话说 array只是一个存储位置,直到我们需要访问 T ,在这种情况下,我们将其复制到适当的对齐方式,并使用该值,然后将其复制回存储中。

注意:

T可能很容易复制,但不能保证 T将被简单地复制......它可以是你能想到的任何类

所以.....这有可能吗(希望符合标准?)

最佳答案

这个问题正在演变,我不会通过相应地修改这个答案来跟踪它。

是的,对于普通可复制对象,您可以使用memcpy,标准中的(非规范)示例中使用了它。

C++11 §3.9/2:

For any object (other than a base-class subobject) of trivially copyable type T, whether or not the object holds a valid value of type T, the underlying bytes (1.7) making up the object can be copied into an array of char or unsigned char. If the content of the array of char or unsigned char is copied back into the object, the object shall subsequently hold its original value.

对于模板代码,您可以通过 std::is_trivially_copyable 检查类型是否可平凡复制。 .

关于c++ - 存储对齐数据非对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38862435/

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