AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Boolsche Datentypen, die mehr als 1 Byte belegen
Thema durchsuchen
Ansicht
Themen-Optionen

Boolsche Datentypen, die mehr als 1 Byte belegen

Ein Thema von Matze · begonnen am 12. Jan 2006 · letzter Beitrag vom 13. Jan 2006
 
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: Boolsche Datentypen, die mehr als 1 Byte belegen

  Alt 13. Jan 2006, 08:02
Zitat von Matze:
@Mystic: Achso, das hat Performancegründe, aber ganz klar ist es mir trptzdem nicht. Wieso ist das schneller, als beim normalen Boolean?
Auch wenn die Frage nicht an mich gerichtet ist beantworte ich die einfach mal. Der einfache Grund ist die Registerbreite deines Prozessors. Heutige Prozessoren sind in der Regel 32 Bitig, das heißt nichts anderes, als dass deine Register 4 Byte breit sind. Selbst bei den 64 Bitern wird häufig ein 32 Bit BS verwendet, läuft also letztlich auf's selbe hinaus.
Schnelleren Speicher als diese Register wirst du nirgends im Rechner finden, Operationen auf ihnen laufen mit vollem Systemtakt. Ein solches Register wird auch nicht in Einzelteilen betrachtet (die Möglichkeit gäbe es, aber eben nicht für alle Register). Deshalb musst du alle Werte die nur 1 oder 2 Byte belegen in so einem Register mit 0en auffüllen. Willst du prüfen ob ein Wert ungleich 0 ist, und du hast 100000000, dann wäre das als Byte zwar eine 0, aber die oberste 1 könnte noch in dem Register stehen und der Vergleich (32 Bit) würde sagen es ist ungleich 0. Dieses Auffüllen mit 0en ist also ein Schritt mehr (pro Zugriff), den du machen musst. Dies entfällt bei einem Longbool ganz einfach. Du wirst es häufiger in C/C++ Bibliotheken finden, dass deswegen Datentypen DoubleWord orientiert angelegt werden, halt auch das Bool (in C gilt soweit ich weiß <> 0 -> True, 0 False).

Das ist auch schon alles. Natürlich kann man sich darüber streiten ab wann es Sinn macht, denn bei den meisten Programmen wird die IDLE-Zeit und der Zugriff auf langsameren Speicher eine Boolean vs. LongBool Variable übersteigen, aber genauso könnte man fragen ob 3 gesparte Byte das wirklich Wert sind.
An sich wird natürlich in der heutigen Zeit (riesiger Speicher, hohe Abstraktionsebene) viel mehr Wert auf Performance gelegt als auf Speicherverbrauch (nicht überall, ist klar). Wenn du schon dabei bist, schau einfach mal bei Integer und Cardinal vorbei, die gibt es auch nicht nur so. Selber Grund, die sind immer optimal was die Performance angeht, denn sie entsprechen immer der Registerbreite (bzw. dem BS). Nur wenn du ein festgelegtes Protokoll hast, eine Bibliothek oder ähnliches, wo du weißt wie viel Byte ein Wert exakt belegt, verwendest du dann LongWord statt Cardinal (analog für alle anderen).

Gruß Der Unwissende
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz