Platzmangel



  • Hallo...

    Ich habe hier eine Klasse von der ich sehr viele Objekte haben werde... Kleiner kriege ich die Klasse nicht. Nun ist meine Frage ist es nicht Speicherplatzschonender wenn die nun die Objekte nicht dynamisch anlege weil sonst muss ich von denen immer noch zusätzlich einen Pointer speichern. Auch ist es schonender wenn ich da keine abstrakte Klasse bei dieser Klasse dazwischenlege weil sonst muss ich ja noch die vTable für jedes Objekt speichern...

    Merci!!!



  • Wenn du nicht gerade Dateien von mehreren MB in deinen Objekten speicherst, sollte das ziemlich egal sein (und falls doch solltest du dein Konzept noch einmal überdenken).
    Abstrakte Klassen und Zeiger auf diese machen zwar nicht immer Sinn, aber die virtuelle Tabellen und Zeiger sind absolut mickrig, es ist kaum sinnvoll aus Speicherplatzgründen darauf zu verzichten.



  • Die Klasse beeinhaltet nur einen Integer also 4 Byte was die Größe von der vTable und den Pointern schon erheblich vergrößert... Konzept geht leider nicht anders es werden einfach enorm viele Objekte dieser Klasse erzeugt und die Frage ist jetzt ob es weniger Platz braucht wenn ichs so mache
    Klasse a[500];

    oder so:
    Klasse* b[500];
    für alle 500

    und ob sich dann auch auszahlt keine vtable zu benutzen...



  • Du brauchst doch nur einen Zeiger auf den Block, wenn du alle Objekte in einen großen Speicherblock packst.



  • Erklär doch dein Konzept mal im Detail (worum geht es etc.).

    Wenn Du die Objekte nicht dynamisch anlegst, sprengst Du den Heap. Von daher führt kein Weg an dynamischer Allokokierung vorbei. Wenn Du wirklich so viele Objekte brauchst, solltest Du mal über einen überladenen new/delete-Operator nachdenken.



  • Speicherplatzmangel schrieb:

    Die Klasse beeinhaltet nur einen Integer also 4 Byte was die Größe von der vTable und den Pointern schon erheblich vergrößert... Konzept geht leider nicht anders es werden einfach enorm viele Objekte dieser Klasse erzeugt und die Frage ist jetzt ob es weniger Platz braucht wenn ichs so mache
    Klasse a[500];

    oder so:
    Klasse* b[500];
    für alle 500

    letzteres ist wirklich übertrieben, ich würde höchstens das hier nehmen:

    Klasse *b = new Klasse[500];
    

    (oder gleich einen richtigen Container - der macht weniger Arbeit)


Anmelden zum Antworten