Hey, ich habe folgende #define DSP_BIT_SEGS 0x01 //all segments (set digit on or off) #define DSP_BIT_DP 0x20 //dot point on/off nun frage ich mich bei den beiden Makros die ich geschrieben habe, welches wohl günstiger ist. Wieviel wird dem Prozessor vom Compiler/Preprozessor in den Fällen bereits abgenommen? A) #define DSP_F_RESET_BIT(digit,bit) Dsp_raw_data[digit].Bits&=bit^0xFF B) #define DSP_F_RESET_BIT(digit,bit) Dsp_raw_data[digit].Bits&=~bit Aufruf: DSP_F_RESET_BIT(5,DSP_BIT_SEGS|DSP_BIT_DP); oder DSP_F_RESET_BIT(5,DSP_BIT_DP);
Ohne Kenntnis der zugrunde liegenden Prozessorarchitektur: Völlig egal.
Probieren geht über Studieren. Probier es einfach aus. Nimm eine der X Möglichkeiten, ein Assembler-Dump zu erstellen (z.B. mit -save-temps -fverbose-asm) und schau nach.
Ich würde auch ohne Kenntnis der Prozessorarchitektur davon ausgehen, daß beide Varianten exakt denselben Code produzieren, da der Compiler/Optimizer das hier schon so weit vorbereietet, daß in die Codegenerierung schon das gleiche reingeht. Wenn du im Zweifel bist, schau dir den generierten Assemblercode doch einfach mal an. Bei Variante A fehlen übrigens Klammern: Maddin schrieb: > #define DSP_F_RESET_BIT(digit,bit) > Dsp_raw_data[digit].Bits&=bit^0xFF Damit macht der Präprozessor daraus:
1 | Dsp_raw_data[5].Bits&=0x01|0x20^0xFF |
und da ^ stärker bindet als |, interpretiert der Compiler das als:
1 | Dsp_raw_data[5].Bits &= 0x01 | (0x20^0xFF) |
Rolf Magnus schrieb: > > Bei Variante A fehlen übrigens Klammern: Bitto in B ... > und da ^ stärker bindet als |, interpretiert der Compiler das als: ... da ~ stärker bindet als |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.