reinterpret_cast cast cost

14,696

Solution 1

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.

Solution 2

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.

Solution 3

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.

Solution 4

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

Solution 5

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.

Share:
14,696

Related videos on Youtube

fulmicoton
Author by

fulmicoton

Updated on May 01, 2022

Comments

  • fulmicoton
    fulmicoton almost 2 years

    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?

  • Billy ONeal
    Billy ONeal over 13 years
    static_cast can have runtime cost as well; though it's usually just a single pointer adjustment, or code to covert one type to another (such as an int into a float)
  • Billy ONeal
    Billy ONeal over 13 years
    dynamic_cast is more akin to static_cast with runtime checking rather than reinterpret_cast. You cannot cast polymorphic types with reinterpreT_cast.
  • Ben Voigt
    Ben Voigt over 13 years
    Won't static_cast also call user-defined conversions? The runtime cost on those is unbounded.
  • Alex F
    Alex F over 13 years
    Right, static_cast has runtime cost in the case of type (not pointer) conversion. My point is that dynamic_cast is the only cast type which has additional runtime cost, relatively to C casting.
  • Matt Joiner
    Matt Joiner over 13 years
    @Billy ONeal: You can but not polymorphically aware.