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...