2 Stimmen

BOOL-Definition

Wenn der Datentyp BOOL nicht ohne weiteres vordefiniert ist, habe ich boolean mit der folgenden Definition verwendet,

typedef unsigned char BOOL;

(Wegen der Speichernutzung).

Ich habe erkannt, dass es aus Leistungsgründen besser sein könnte, die native Busbreite zu verwenden. Bei einem 32-Bit-Prozessor kann es zum Beispiel sein

typedef unsigned int BOOL;

Was passiert nun mit dem 64-Bit-Prozessor, wenn ich weiterhin BOOL für die native Busbreite definieren möchte?

2voto

TrayMan Punkte 6755

Zumindest x86 und ARM sind in der Lage, ein Byte in und aus einem 32-Bit-Register zu laden und zu speichern, ohne dass dies Nachteile mit sich bringt, so dass die Verwendung von char wirklich keine Auswirkungen auf die Leistung hat. Ich bin mir nicht ganz sicher, aber ich würde wetten, dass x86-64 auch solche Anweisungen hat. (Natürlich können x86 und x86-64 auch 8-Bit-Werte direkt in Registern verarbeiten).

Die einzige Sorge könnte also die Speicheranordnung sein. Natürlich richtet der Compiler alles aus, so dass die meiste Zeit, Char-Werte in structs aufgefüllt werden, es sei denn, sie sind direkt nebeneinander, dann könnten Sie tatsächlich ein paar Bytes Platz sparen und erhalten eine etwas bessere Cache-Leistung. Wenn Sie riesige Arrays von BOOLs haben und der Speicherbedarf ein Problem ist, sollten Sie sie trotzdem mit Bitpacks versehen.

In jedem Fall ist das kein Thema. Versuchen Sie doch einmal, ein in beide Richtungen kompiliertes Programm laufen zu lassen, um zu sehen, ob es signifikante Auswirkungen auf die Leistung oder die Speichernutzung gibt. Wenn Sie das feststellen, können Sie sich ein Bier kaufen und so tun, als ob es von mir wäre.

2voto

vitaly.v.ch Punkte 2358

Optimal für die meisten Plattformen

typedef enum { FALSE = 0, TRUE = 1, } BOOL;

0voto

Assaf Lavie Punkte 67504

Nun, man könnte den Typedef immer definieren als long long oder so etwas, aber ich bin mir eigentlich nicht sicher, ob die Leute das aus irgendeinem Grund tun. (Sie könnten wahrscheinlich auch eine bedingte Definition basierend auf sizeof(int*) oder so etwas tun).

0voto

Arafangion Punkte 10934

Die Verwendung eines Char könnte langsamer sein als die Verwendung einer Ganzzahl.

0voto

dmityugov Punkte 4300

int_fast8_t aus stdint.h sollte eine gute Wahl sein

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X