![]() |
Boolean = 1 Byte
Ich hab mir vor kurzem die Frage gestellt, warum Booleans 1 Byte groß und nicht 1 Bit ?
Ich nehme an, dass der CPU 1 Byte bzw bei 32 Bit Prozessoren 4 Bytes besser handeln kann als einzelne Bits. Stimmt diese Annahme ? MfG |
Re: Boolean = 1 Byte
Jo. 1-Bit-Werte gibts in nem 32-Bit Prozessor überhaupt nicht ;)
|
Re: Boolean = 1 Byte
1-Bit Werte gab es eigentlich auch bei 8/16-Bit Prozessoren nicht. Die kleinste adressierbare Einheit ist ein Byte
|
Re: Boolean = 1 Byte
wo du jeweils "einfach" bitweise arbeiten kannst, das sind SETs
type MySet = Set of (bit0, bit1, bit2, bit3, bit4, bit5, bit6, bit7); PS: miß mal wie groß BOOL / LongBool sind :stupid: (die sind gut für die WinAPI, denn da ist BOOL je 4 Byte klein, bei der 32-Bit-API) |
Re: Boolean = 1 Byte
Also ich habe das bis jetzt so gemacht, dass ich einen Byte genommen habe und
einfach die Bits gesetzt hab Somit hatte ich dann 8 Booleans in einem... |
Re: Boolean = 1 Byte
Somit hast Du die Bitmaske neu erfunden :mrgreen:
|
Re: Boolean = 1 Byte
Ist aber langsamer als für jeden Wert ein Byte zu verwenden
|
Re: Boolean = 1 Byte
jupp...
Boolean lesen: Byte lesen (und fertsch Boolean speichern: Byte speichern (und och fertsch) Bit lesen: Byte lesen > Maske anwenden Bit speichern: Byte lesen > Maske anwenden > Bit in Byte umwandeln > beide Bytes verknüpfen > Byte speichern |
Re: Boolean = 1 Byte
Bei der zweiten Operation übertreibst du aber. Du kannst zum Beispiel or [Adresse], Maske oder die Befehle BTS bzw. BTR verwenden.
|
Re: Boolean = 1 Byte
na gut, aber ob du das nun selber machst, oder es intern von diesen Befehlen machen läst, sollte doch fast auf's gleich rauskommen :roll:
|
Re: Boolean = 1 Byte
Ich habe eben gerade ganz naiv zwei Methoden gegeneinander laufen lassen:
Delphi-Quellcode:
Beides jeweils 160 Millionen mal, wobei nach sechzehn Durchläufen immer ein Sprung erfolgte. Das ergab bei mir 1250 ms gegen 734 ms. Das ist nicht sehr aussagekräftig, weil hier der Cache stark dazwischenfunkt, aber als Tendenz ist das meiner Meinung nach durchaus gültig.
//1.
mov al, byte ptr [boolVar] or al, 1 mov byte ptr [boolvar], al //2. or [boolVar], 1 |
Re: Boolean = 1 Byte
Ich würde sagen: Geschwindigkeitsunterschiede tendieren gegen null.
Unterschiede sehe ich eigentlich nur hier: - Speicherverbrauch: Bools in Bits zu speichern kann bei sehr vielen Werten sinnvoll sein, um von 300 MByte nicht 87,5% brach liegen zu lassen - Mehr Aufwand, mehr Code, damit Fehlermöglichkeiten bei der bitweisen Speicherung. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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