ful*_*ton 40 c c++ reinterpret-cast
我的理解是C++ reinterpret_cast和C指针转换只是一个编译时功能,它根本就没有性能成本.
这是真的?
MSa*_*ers 56
这是一个很好的假设.但是,优化器可能会在存在reinterpret_cast<>
或C指针强制转换的情况下受到限制.然后,即使转换本身没有相关的指令,结果代码也会变慢.
例如,如果将int转换为指针,优化器可能不知道该指针指向的是什么.因此,它可能必须假设通过该指针的写入可以更改任何变量.这超过了非常常见的优化,例如将变量存储在寄存器中.
那就对了.除了在新宽度上执行指令的性能增益/损失之外,没有任何费用,我可以补充说,在极少数情况下只是一个问题.在我听说过的每个平台上的指针之间进行投射都没有成本,也没有任何性能变化.
C++中的C样式转换将首先尝试static_cast,如果无法执行静态转换,则仅执行reinterpret_cast.static_cast可以在多重继承的情况下(或在将接口转换为具体类型时)更改指针的值,此偏移计算可能涉及额外的机器指令.这最多只能是1台机器指令,所以非常小.