2

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

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

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

4

2 回答 2

5

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

于 2012-11-06T11:20:53.610 回答
2

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

于 2012-11-06T11:22:59.960 回答