假设我有一个模板函数,它处理指向未知类型的指针T
。现在,如果类型T
恰好void*
在 64 位平台上,那么它必须是 8 字节对齐的,但如果T
碰巧char
它必须是 1 字节对齐的,并且如果T
碰巧是一个类,那么它的对齐要求将取决于它的成员变量。
这一切都可以在纸上计算,但是如何让编译器产生给定类型的对齐要求T
?
有没有办法在编译时找到给定类型的对齐要求?
在 C++11 中,您可以使用alignof和alignas进行断言并提供对齐要求。另请查看std::align以控制运行时的对齐方式。
在没有 C++11 的情况下,最容易使用大于或等于sizeof(T)
. 您可能还希望将其限制为最大基元的对齐方式。8 是 64 位架构上的一个相当安全的赌注(尽管您可能需要留意诸如 SSE 数据类型之类的东西)。