enum zu viel Speicher



  • enums sind ja ganz Praktisch, aber sie verbrauchen mir zu viel Speicher. Wenn ich beispielsweise ein großes feld an Enums habe, dann ist das reine Platzverschwendung. Kann ich enums auch irgendwie unändern, dass sie nur ein byte belegen? Ich kann mir auch irgendwie schwei vorstellen, das irgendwer ein enum mit 2147483647 einträgen schreiben würde, deshalb hab ich mich schon gefragt, warum das überhaupt so groß ist.



  • es ist nicht festgelegt, was für nen typ für enums verwendet werden soll. der gewählte typ muss nur gross genug sein, um allen elementen des enums disjunkte werte zuweisen zu können.

    wenn du willst, dass nen "enum" genau 1 byte pro element verbrät, dann musst du dir was eigenes bauen. z.b. nen struct mit statischen membern.



  • Krux schrieb:

    enums sind ja ganz Praktisch, aber sie verbrauchen mir zu viel Speicher. Wenn ich beispielsweise ein großes feld an Enums habe, dann ist das reine Platzverschwendung.

    Wieviel RAM hast Du? Wieviel brauchst Du? Glaubst Du nicht, dieser Faktor vier ist hier vollkommen wurscht?

    Ausnahmen sind natürlich Programme für embedded systems oder *enorm* viele Daten (die man dann wahrscheinlich aber eh anders bearbeiten müsste) aber ansonsten kann man auf diese Micro-Optimierung getrost verzichten.



  • Du kannst das enum auf (unsigned) char casten, und wieder zurück.
    In die Struct packst du ein (unsigned) char, und gut.
    Natürlich musst du dabei beachten dass auch alle Werte des enums im Wertebereich von (unsigned) char liegen.



  • wenn man eh schon in so engem speicherrahmen arbeitet kann man eigentlich auch gleich auf "saubere" enums verzichten und char-literale verwenden.



  • für 'enums' wird meistens intern 'int' verwendet, weil darauf der zugriff am schnellsten ist.
    btw: ich würde's nicht in char casten, damit nimmt man dem compiler die möglichkeit fehler zu erkennen. vielleicht hemmt ihn das auch bei gewissen optimierungen. es gibt ausserdem auch compiler, bei denen man einstellen kann, wie breit enums sein sollen...
    🙂


Anmelden zum Antworten