reinterpret_cast cast cost

后端 未结 6 877
梦谈多话
梦谈多话 2020-12-29 18:36

My understanding is that C++ reinterpret_cast and C pointer cast is a just a compile-time functionality and that it has no performance cost at all.

Is this true?

相关标签:
6条回答
  • 2020-12-29 18:43

    It's a good assumption to start with. However, the optimizer may be restricted in what it can assume in the presence of a reinterpret_cast<> or C pointer cast. Then, even though the cast itself has no associated instructions, the resulting code is slower.

    For instance, if you cast an int to a pointer, the optimizer likely will have no idea what that pointer could be pointing to. As a result, it probably has to assume that a write through that pointer can change any variable. That beats very common optimizations such as storing variables in registers.

    0 讨论(0)
  • 2020-12-29 18:43

    Yes, this is true. Casting type which has runtime cost is dynamic_cast.

    0 讨论(0)
  • 2020-12-29 18:52

    C style casts in C++ will attempt a static_cast first and only perform a reinterpret_cast if a static cast cannot be performed. A static_cast may change the value of the pointer in the case of multiple inheritance (or when casting an interface to a concrete type), this offset calculation may involve an extra machine instruction. This will at most be 1 machine instruction so really very small.

    0 讨论(0)
  • 2020-12-29 18:57

    You're right, but think about it: reinterpret_cast means maybe a bad design or that you're doing something very low level.

    dynamic-cast instead it will cost you something, because it has to look in a lookup table at runtime.

    0 讨论(0)
  • 2020-12-29 19:03

    That's right. No cost other than any gain/loss in performance for performing instructions at the new width, which I might add, is only a concern in rare cases. Casting between pointers on every platform I've ever heard of has zero cost, and no performance change whatsoever.

    0 讨论(0)
  • 2020-12-29 19:04

    reinterpret_cast does not incur runtime cost.. however you have to be careful, as every use of reinterpret_cast is implementation defined. For example, it is possible reinterpreting a char array as an int array could cause the target architecture to throw an interrupt, because different types may have different alignment rules.

    Get correct first, then worry about efficiency.

    0 讨论(0)
提交回复
热议问题