static_cast von void*
-
Hallo,
kostet ein static_cast von void* zu irgendetwas überhaupt Zeit oder
wird dem Compiler nur mitgeteilt, dass er den Speicherbereich nun
anders betrachten soll (nämlich von diesem Typ).Gruß,
Otto
-
kostet keine zeit. deine annahme ist korrekt.
-
[klugscheiss]
Theoretisch können (dürfen) Zeiger auf unterschiedliche Typen unterschiedlich aussehen.Theoretisch könnte es z.B. sein, dass ein Prozessor keine einzelnen Bytes adressieren kann, und die C++ Implementierung trotzdem einen 8-bittigen Typ anbietet, indem sie entsprechenden Code einfügt, der die grösseren Speicherworte "auseinanderschnippelt". Ein Zeiger auf ein Byte wäre bei so einer Implementierung dann u.U. grösser als Zeiger auf andere, grössere Typen. (Adresse des Speicherwortes + Index des Bytes im Speicherwort)
(Das ist natürlich nur einer von vielen Gründen warum Zeiger unterschiedliche Layouts/Grössen/... haben könnten.)
Da ein void-Zeiger sämtliche Zeiger-Werte "aufnehmen" können muss, muss ein void-Zeiger natürlich so gross sein wie der grösste Zeiger den die Implementierung kennt.
In so einem Fall müsste dann oft konvertiert werden, und zwar in beiden Richtungen (T -> void, void -> T). (Ausgenommen bei Typen deren Zeiger zufällig das gleiche Layout haben wie void-Zeiger, in unserem Fall also vielleicht bei Zeigern auf Bytes)
Das würde natürlich Zeit kosten, die Konvertierung wäre (so sie nicht wegoptimiert werden kann) also nicht mehr "gratis".
[/klugscheiss]Praktisch kenne ich allerdings kein solches System.
Mag sein dass irgendwelche C++ Compiler für irgendwelche verschrobenen DSPs das so machen. Die interessieren mich aber im Moment nicht die Bohne
-
DANKE JUNGS!