reinterpret_cast演员费用

ful*_*ton 40 c c++ reinterpret-cast

我的理解是C++ reinterpret_cast和C指针转换只是一个编译时功能,它根本就没有性能成本.

这是真的?

MSa*_*ers 56

这是一个很好的假设.但是,优化器可能会在存在reinterpret_cast<>或C指针强制转换的情况下受到限制.然后,即使转换本身没有相关的指令,结果代码也会变慢.

例如,如果将int转换为指针,优化器可能不知道该指针指向的是什么.因此,它可能必须假设通过该指针的写入可以更改任何变量.这超过了非常常见的优化,例如将变量存储在寄存器中.

  • 不大可能.在较早的实现中,优化器只是将变量分配给寄存器.使用`register`会关闭该功能.如今,寄存器分配算法要好得多.例如,他们可以为多个变量重用一个寄存器,并将一个变量分配给一个寄存器,仅用于其生命周期的一部分.结果,有效地忽略了变量的`register`关键字. (2认同)

Mat*_*ner 6

那就对了.除了在新宽度上执行指令的性能增益/损失之外,没有任何费用,我可以补充说,在极少数情况下只是一个问题.在我听说过的每个平台上的指针之间进行投射都没有成本,也没有任何性能变化.


dor*_*ron 5

C++中的C样式转换将首先尝试static_cast,如果无法执行静态转换,则仅执行reinterpret_cast.static_cast可以在多重继承的情况下(或在将接口转换为具体类型时)更改指针的值,此偏移计算可能涉及额外的机器指令.这最多只能是1台机器指令,所以非常小.