存储未对齐的对齐数据

时间:2016-08-10 00:27:32

标签: c++ alignment

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

uint8_t array[sizeof(T)];

需要注意的一点是,array可能具有可能与T不兼容的路线。

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

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

注意:

T可以轻易复制,但不能保证T可以轻易复制......它可以是你能想到的任何课程

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

1 个答案:

答案 0 :(得分:1)

问题在不断发展,我不会通过相应修改这个答案来跟踪它。

是的,对于平易可复制的对象,您可以使用memcpy,并在标准中的(非规范)示例中使用。

C ++11§3.9/ 2:
  

对于普通可复制类型T的任何对象(基类子对象除外),无论对象是否包含T类型的有效值,构成对象的底层字节(1.7)可以复制到charunsigned char的数组中。如果将charunsigned char数组的内容复制回对象,则该对象应随后保持其原始值。

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