Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Boolean = 1 Byte (https://www.delphipraxis.net/128122-boolean-%3D-1-byte.html)

mr_emre_d 24. Jan 2009 15:58


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

Meflin 24. Jan 2009 16:16

Re: Boolean = 1 Byte
 
Jo. 1-Bit-Werte gibts in nem 32-Bit Prozessor überhaupt nicht ;)

mkinzler 24. Jan 2009 16:49

Re: Boolean = 1 Byte
 
1-Bit Werte gab es eigentlich auch bei 8/16-Bit Prozessoren nicht. Die kleinste adressierbare Einheit ist ein Byte

himitsu 24. Jan 2009 17:34

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)

mr_emre_d 24. Jan 2009 17:54

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...

DeddyH 24. Jan 2009 17:57

Re: Boolean = 1 Byte
 
Somit hast Du die Bitmaske neu erfunden :mrgreen:

mkinzler 24. Jan 2009 17:57

Re: Boolean = 1 Byte
 
Ist aber langsamer als für jeden Wert ein Byte zu verwenden

himitsu 24. Jan 2009 18:14

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

Apollonius 24. Jan 2009 19:50

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.

himitsu 24. Jan 2009 20:16

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:

Apollonius 24. Jan 2009 20:25

Re: Boolean = 1 Byte
 
Ich habe eben gerade ganz naiv zwei Methoden gegeneinander laufen lassen:
Delphi-Quellcode:
//1.
mov al, byte ptr [boolVar]
or al, 1
mov byte ptr [boolvar], al

//2.
or [boolVar], 1
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.

jfheins 24. Jan 2009 20:38

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