Einmal bitte über eine kleine Klasse drüberschauen (Allocate memory)



  • wann macht es sinn den vector durch nen smart pointer anzulegen ?

    wie gesagt: schaff dir erstmal ein solides Basis-Wissen - dann würde solche komischen Fragen gar nicht kommen



  • Ich lese momentan den Primer von lippman.

    Da wird vector sowohl auf dem Stack als in Beispielen auch mittels shared_ptr verwendet



  • Arcoth schrieb:

    wob schrieb:

    Auf gcc/x64 ist sizeof(vector<int>)=24, ein Pointer aber hat nur size 8. Du kannst also 16 Bytes sparen, wenn du den vector dann nicht benutzt.

    Das ist ein Trugschluss. Das dynamische allozieren eines vector s birgt auch einen overhead in der Speicherverwaltung des Betriebssystems (was signifikant werden kann, sobald wir eben viele Objekte so anlegen). Der erwartete tatsächliche Speicherbedarf muss also nicht bei 20 liegen, sondern kann auch 24 übersteigen.

    Sorry, bin mir nicht sicher, ob ich dich richtig verstanden habe. Vor allem ist mir nicht klar, wo bei dir der erwartete Wert von 20 herkommt.

    Angenommen, ich nutze den vector nicht (das war ja meine Annahme), dann habe ich nirgends irgendwas mit dynamischem Speicher zu tun (alle vector-pointer sind nullptr) und somit auch keinen Overhead, außer dass ich NObjekte*16 Bytes Speicher spare (oder wo ist da mein Fehler?).

    Realistisch wird man den vector ja manchmal schon benutzen, sonst könnte man ihn ja komplett entfernen. Angenommen, ich habe 1e7 solche Objekte, von denen 1 Promille den vector braucht. Ich spare also 1e7*16 - 1e5*24 - 1e5*(zusätzlicher overhead) an Speicher. Jetzt ist die Frage, wie groß die Klammer ist. Ist es das, was du hier sagen willst? Oder ist meine Rechnung verkehrt?

    Ich bin dabei natürlich immer davon ausgegangen, dass N_benutze_vectoren << N_objekte_gesamt ist.


  • Mod

    wob schrieb:

    Arcoth schrieb:

    wob schrieb:

    Auf gcc/x64 ist sizeof(vector<int>)=24, ein Pointer aber hat nur size 8. Du kannst also 16 Bytes sparen, wenn du den vector dann nicht benutzt.

    Das ist ein Trugschluss. Das dynamische allozieren eines vector s birgt auch einen overhead in der Speicherverwaltung des Betriebssystems (was signifikant werden kann, sobald wir eben viele Objekte so anlegen). Der erwartete tatsächliche Speicherbedarf muss also nicht bei 20 liegen, sondern kann auch 24 übersteigen.

    Sorry, bin mir nicht sicher, ob ich dich richtig verstanden habe. Vor allem ist mir nicht klar, wo bei dir der erwartete Wert von 20 herkommt.

    Man könnte ja denken, dass ich mit deiner Variante einen erwarteten Wert von 0.58+0.5(24+8)=200.5 * 8 + 0.5 * (24 + 😎 = 20 habe.

    Ich bin dabei natürlich immer davon ausgegangen, dass N_benutze_vectoren << N_objekte_gesamt ist.

    Tja, das bin ich nicht. 🙂


Anmelden zum Antworten