如何检查键入的指针是否与该类型正确对齐?

时间:2012-11-06 11:16:06

标签: c++ alignment

假设我有一个模板化函数来处理指向未知类型T的指针。现在,如果类型T恰好是64位平台上的void*,那么它必须是8字节对齐,但如果T恰好是char则必须是1- {1}}字节对齐,如果T碰巧是一个类,那么它的对齐要求将取决于它的成员变量。

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

有没有办法在编译期间找到给定类型的对齐要求?

2 个答案:

答案 0 :(得分:4)

在C ++ 11中,您可以使用alignofalignas来创建断言并提供对齐要求。另请查看std::align以控制运行时的对齐。

答案 1 :(得分:2)

在没有C ++ 11的情况下,最容易使用大于或等于sizeof(T)的下一个二次幂。您可能还希望将其限制为最大基元的对齐方式。 8在64位架构上是一个相当安全的赌注(尽管你可能需要关注SSE数据类型之类的东西)。