Einsatz von short



  • Nexus schrieb:

    Was ich auch schon gehört habe, wäre, dass int der ideale Typ wäre, weil er mit 4 Bytes meistens gerade an die Grösse der Prozessorregister angepasst ist. Heisst das, short ist diesbezüglich langsamer? Können nicht zwei short -Werte in einem Register gespeichert werden, und dann sieht es bezüglich Performance sogar besser aus?

    int war in der regel der für die plattform am besten passende typ, bezogen auf registergröße und damit rechengeschwindigkeit. ich schreibe "war", weil bei compilern für die 64-bit-generation der x86-cpus mit dieser tradition gebrochen wurde (int ist dort weiterhin 32 bits breit), wohl aus rücksicht auf minder gut geschriebene software, die sich sonst nicht einfach neu kompilieren ließe.

    auf 386+ mit 16-bit registern zu rechnen ist schlichtweg langsamer als mit 32-bit registern. wobei ich mich auf vielerorts geschriebenes verlasse, ausprobiert habe ich es nie.



  • @erklärbär der int kann auf 64bit systemen 32bit betragen. er muss es nicht. beispiele für beide methoden sind: msvc mit 32bit int auf 64bit systemen (danke an hustbaer) und der gcc mit 64bit int auf 64bit systemen.

    ansonsten: ich nutze short auch eher selten, da sie dank alignment meistens genau soviel speicher brauchen wie ints.



  • ghorst schrieb:

    @erklärbär der int kann auf 64bit systemen 32bit betragen. er muss es nicht.

    Das ist definitiv falsch! Es hängt vom OS ab, bei JEDEM UNIX muß ein int 32Bit groß sein im 64Bit Modus, und das ist vollkommen unabhängig vom Compiler, weil das so in der Single UNIX Spec definiert ist.



  • Also zusammengefasst gibt es eigentlich keinen Grund, short zu verwenden? Besteht nicht die Möglichkeit, dass dadurch schnellerer Code entsteht? Oder muss man sogar Angst haben, dass der Code langsamer wird?



  • @nexus im normalfall: weder noch. der code sollte genauso schnell sein, da shorts mit alignment genauso schnell zugreifbar sind wie ints.



  • Aber durch dieses Alignment werden short -Variablen wie ints behandelt (Performance und Speicherverbrauch)? Also gibt es doch keinen Grund, sie zu verwenden?



  • Das sind Mikrooptimierungen von denen man die Finger lassen sollte, außer sie sind absolut notwendig. Wenn shorts für Modellierung ausreichend sind, sollte man sie verwenden. Ob shorts nun schneller oder langsamer als ints sind, hängt von der verwendeten Hardwareplattform ab, und ist keine Eigenschaft des Datentyps selbst.



  • Naja, aber wenn man in den meisten Fällen durch short nichts gewinnt, aber sich im Wertebereich einschränken muss, ist die Thematik doch schon eine Überlegung wert...


  • Administrator

    Also um es kurz zu machen. Ich selber brauche äusserst selten den Typ short.

    Mir fallen spontan nur zwei Bereiche ein, wo ich shorts einsetze:

    • Ich habe bestimmte Vorgaben irgendwoher, zum Beispiel von einer Datenstruktur.
    • Ich möchte sicherstellen, dass ein gewisser Datenbereich eingehalten wird in meiner Bibliothek oder meinem Programm. Das kann viele Gründe haben, vielleicht will man einfach eine maximale Grenze setzen, weil es auch kritisch werden könnte, wenn die Zahl höher ginge. Dank dem short muss ich dann keine Bereichsprüfung machen, sondern kann mich auf dessen Grenze verlassen, bzw. darauf, dass der User die Warnungen einhält. Allerdings nicht unbedingt zu empfehlen, da es glaube ich nirgends heisst, dass ein short nicht auch grösser als 2 Bytes sein kann. Beim Standard gibt es da glaub ich nur eine Mindestgrösse-Vorgabe

    Grüssli



  • Okay, allen vielen Dank für die Antworten!
    Dann werde ich in Zukunft den Datentyp short mit Bedacht einsetzen...


Anmelden zum Antworten