如何检查该类型的类型指针是正确对齐的

How do I check a typed pointer is properly aligned for that type?

本文关键字:类型 指针 对齐 何检查 检查      更新时间:2023-10-16

假设我有一个模板函数,该功能涉及指针尚未为T的未知类型。现在,如果类型T恰好是64位平台上的void*,则必须对其进行8个字样,但是如果T恰好是char,则必须对1字节对齐,并且T恰好是一类,那么其对齐要求将取决于在其成员变量上。

所有这些都可以在纸上计算,但是如何使编译器产生给定类型T的对齐要求?

是否可以在编译时间找到给定类型的对齐要求?

在C 11中,您可以使用对齐和Alignas做出断言并提供对齐的要求。还要查看STD ::对齐以控制运行时的对齐。

在没有C 11的情况下,最容易使用两个大于或等于sizeof(T)的功率。您可能还需要将其限制为最大原始的对齐。8是64位体系结构的一个非常安全的赌注(尽管您可能需要密切关注SSE数据类型)。