【问题标题】:How do I check a typed pointer is properly aligned for that type?如何检查类型化指针是否针对该类型正确对齐?
【发布时间】:2012-10-26 08:03:17
【问题描述】:

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

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

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

【问题讨论】:

  • 编译器会自动做到这一点!你想用这个来达到什么目的?
  • C++11 中有 alignof 关键字。
  • @BigBoss:我正在使用自定义分配器,我想确保它始终返回正确对齐的指针。
  • 好的,那么你可以使用 C++11 的 alignof 或者你可以使用 sizeof double 这不是标准的,但它适用于我所知道的所有类型的编译器!

标签: c++ alignment


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-06-24
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 2014-03-18
      • 2021-12-25
      • 1970-01-01
      相关资源
      最近更新 更多