Größe des reservierten Speichers



  • Hallo zusammen,

    ich kann ja mit

    void* first = (void*)malloc(memSize);
    

    neuen Speicher anfordern und ihn mit

    free(first);
    

    wieder freigeben.

    Da ich beim freigeben keine Größe brauche, muß sie ja irgendwo
    hinterlegt sein.

    Gibt es eine Methode, mit der ich die Größe des Speichers
    mit Hilfe des first-Zeigers herausbekomme oder ist es zwar möglich aber
    aus Performancegründen nicht ratsam?

    Gruß,
    CSpille



  • Das ist sicher möglich (schließlich macht der Compiler das auch bei free() oder realloc()), aber vermutlich nicht portabel - sprich: Jeder Compiler hat seine eigene Methode, sich die Speichergröße zu merken.



  • Ein Thread dazu:

    http://www.heise.de/foren/go.shtml?read=1&msg_id=9001924&forum_id=44546

    Die Frage ist aber, wieso man die Größe denn ermitteln will. Man kennt sie ja bereits beim reservieren.



  • Dann werd ich mir ne Mehtode schreiben, die mir
    4 Byte mehr reserviert und in die ersten 4 Byte die Grüße schreibt und
    nen Zeiger auf das 5. zurückliefert.

    Dann kann ich mir auch ne Methode sizeOfMem schreiben, die kuckt wie groß
    es ist...

    So brauch ich die Größe nicht immer mitschleppen.

    Ich weiß, dass es dann besser ist 2^x-4 Byte zu reservieren (wegen Fragmentierung).

    Danke für eure Antworten,

    CSpille



  • schlechte idee.
    frag dich lieber, wozu du die groesse auslesen musst und wieso du sie nicht gleich irgendwo "mitschleppen" solltest.
    oder benutz doch gleich c++ und schreib dir entsprechende klassen. ist viel sauberer als was du da angedroht hast.



  • Ich habe mich dazu entschlossen eine
    Struktur zu benutzen, die eine Größe enthält und den Zeiger auf
    den Speicherbereich und nicht die Größe direkt vor den Speicherbereich...

    Dass ich ne C++-Klasse schreiben kann ist mir klar, nur ich möchte mal ein Programm
    komplett in C schreiben.

    Gruß,
    CSpille



  • Oder pack den Pointer und die Variable für die Größe in ein struct.

    Edit: Zu spät 😛

    Edit2: malloc() zu casten ist ja schon unsinnig genug, aber dann auch noch void*? Hab ich noch nie gesehen...


Anmelden zum Antworten