Alexander (HH): C - speichersparen/ansatz

Beitrag lesen

Moin Moin!

was  macht man aber in C in solchen fällen? arrays variabler-länge lassen sich ja nicht definieren, bzw - ich weiss nciht wie,

<murmel>Als ob dieser überdrehte Macro-Assembler überhaupt so etwas wie Arrays oder Strings unterstützen würde ...</murmel>

Arrays beliebiger Größe simulierst Du, inden du den benötigten Speicherplatz irgendwo reservierst (typischerweise mit malloc/calloc) und dann mit Pointer-Arithmetik in dem Speicherbereich die Daten unterbringst. Wenn Du die Arrays nicht mehr benötigst, mußt Du die Reservierung wieder aufheben (free), aber bitte nur einmal, ansonsten demoliert die sogenannte Speicherverwaltung in aller Regel ihre internen Strukturen und reißt irgendwann Dein Programm ins Nirvana, typischerweise beim nächsten impliziten oder expliziten Aufruf von malloc oder free. Verkneifst Du Dir das Aufheben der Reservierung, geht Deinem Programm irgendwann der Speicher aus ("memory leak").

Wie viele Elemente Dein Array enthält, und für wie viele Elemente Platz ist, mußt Du Dir allerdings selbst merken, C hilft Dir dabei nicht. Für die Elemente-Anzahl kannst Du alternativ wie bei der String-Karrikatur eine Endmarke benutzen, die sonst in der Array-Simulation nicht vorkommen darf. Wie viel Speicher ein einzelnes Element benötigt, kannst Du über die sizeof-Funktion herausfinden, den gesamten benötigten Speicherplatz ermittelst Du per Multiplikation mit der maximalen Elementanzahl.

Wenn Die Array-Elemente sehr unterschiedliche Größen haben, oder sich ihre Größe zur Laufzeit auch noch ändert, kannst Du stattdessen auch einfach oder doppelt verkettete Listen benutzen, oder einen  binären (Such-)baum.

Genug Suchbegriffe?

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".