Gibt es einen Nachteil für die Verwendung char
für kleine ganze Zahlen in C? Gibt es andere Vorteile als den Belegungs-/Speichervorteil?Vorteile/Nachteile für die Verwendung von char für kleine ganze Zahlen in C
Insbesondere ist der Prozessor wahrscheinlich mit Integer-Arithmetik auf einem char
besser oder schlechter als wäre es auf eine (long
/short
) int
fertig zu werden?
Ich weiß, dass dies Prozessor/System/Compiler spezifisch sein wird, aber ich hoffe auf eine Antwort im allgemeinen Fall, oder zumindest der allgemeine Fall für 32-Bit Windows und Solaris, die Systeme I ' m arbeite gerade an. Ich gehe auch davon aus, dass Dinge wie Überlauf/Wraparound-Probleme bereits behandelt wurden.
Update: Visual Studio 6.0 hat nicht wirklich stdint.h
wie von Christoph vorgeschlagen. Ein kleines Benchmarking unter Windows (VS 6.0, debug build, 32-bit) mit einer Handvoll gestapelter Loops ergibt int
und long
als eine ähnliche Leistung, die etwa doppelt so schnell ist wie char
. Das Ausführen des gleichen Tests unter Linux mit gcc in ähnlicher Weise pegs int
und long
als ähnlich, und beide schneller als char
, obwohl der Unterschied weniger ausgeprägt ist.
Als Seite beachten, ich habe nicht viel Zeit auf der Suche, verbrachte aber the first implementation of stdint.h
for VS 6.0 I found (via Wikipedia) definiert als unsigned char
trotz dieser scheinbar zumindest in meinen Tests langsamer. Also die Moral der Geschichte, wie Christoph zu Recht anmerkte: immer Benchmark!
Das ist sehr nützlich, ich wusste nichts über diese, danke! –
gut zu sehen, eine Antwort, die auf den Standard schneidet, gute Arbeit –
Wenn Sie sich um Portabilität kümmern (wie ich, wo ich Code zwischen eingebettetes Ziel und PC freigeben) verwenden Sie keine schnellen Typen, um wirklich etwas zu "speichern" (Klassenmitglieder, Strukturelemente usw.). Verwenden Sie schnelle Typen zum Iterieren, zum Zugriff auf Arrays oder als lokale Cache-Variable. – MaR