www.mikrocontroller.net

Forum: PC-Programmierung realloc vs free/malloc


Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ist es eigentlich schneller zur Änderung der Größe eines 
Speicherbereichs realloc zu nehmen, anstatt mit malloc neuen speicher 
anzufordern, Inhalt kopieren, und den alten Speicherbereich mit free 
freizugeben?

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Realloc versucht, den bestehenden Speicherblock nach hinten zu
vergrößern. Nur wenn dies nicht möglich ist, wird ein neuer
Speicherblock gemalloct, die Daten dort hinein kopiert und der alte
gefreet.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Realloc is meistens immer effizienter.

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
meistens immer?

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo. Bei Reallob besteht die immerhin Chance, einfach das Blockende ein 
Stück nach hinten zu verschieben und so den Block größer zu machen. 
Wenns nicht hinhaut, wird automatisch free+malloc gemacht.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Morin wrote:
> meistens immer?

@Sven: Hier ging es wohl eher um die Formulierung, die augenscheinlich 
keinen Sinn ergibt ;)

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> @Sven: Hier ging es wohl eher um die Formulierung, die augenscheinlich
> keinen Sinn ergibt ;)

Genau ;)

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich schon begriffen ;-)

Dunkel wars, der Mond schien helle...

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ganze soll für eine schnelle container Klasse benutzt werden.

Im Moment benutze ich beim ändern Kapazität der Liste malloc um neuen 
Speicher anzufordern, und kopiere dann mit
new (adress) T(old_v[i])
die Objekte in den neuen Speicherbereich (T is der Templateparameter. es 
wird also der Copy-Construktor verwendet). Anschließend wird der alte 
mit free gelöscht.

C++ Objekte sollte man ja nicht bitweise mit z. B. memcpy verschieben, 
sondern ebend den Copy-Construktor verwenden. Dieses kopieren versuche 
ich nun zu vermeiden, soweit dies möglich ist.

Gibt es vielleicht eine Möglichkeit, einen Speicherbereich nur zu 
vergrößern, wenn dies ohne verschieben möglich ist?

Könnte ich mich zumindest beim verkleinern mittels realloc darauf 
verlassen, dass der Speicherbereich nicht verschoben wird?

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ...beim ändern der Kapazität der ...
                 ^^

Ich schmeiße ein 'der' nach...

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frage: Wozu brauchst du das? Ist dir der vector in der STL nicht schön 
genug?

Es macht übrigens Sinn vorher schon ein bisschen mehr Speicher zu 
reservieren als du brauchst, spart dir dann einen Haufen reallocs.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verdopple immer den Speicher, wenn die Kapazität nicht reicht.

Du tuts ja so, als würde ich ein riesen Ding nach programmieren wollen. 
Meine kleine Liste ist mit 50 Zeilen schnell gemacht :)

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dumdidum

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus wrote:
> Ich verdopple immer den Speicher, wenn die Kapazität nicht reicht.

Das ist auch nicht gerade die beste Strategie und fuehrt gerade bei 
Systemen, die viel Spreicher brauchen, schnell in den Abgrund...

Autor: wohoooo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wohoooo

Autor: tuppes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Könnte ich mich zumindest beim verkleinern mittels realloc
> darauf verlassen, dass der Speicherbereich nicht
> verschoben wird?

Nein. Da für die Funktionen der C-Standardbibliothek nur definiert wird, 
WAS sie tun, aber nicht, WIE sie es tun, gibt es darauf keinen Verlass.

Autor: Jorge (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Microsoft Compiler emulieren realloc über free und alloc-> kein 
Vorteil.

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hängt nicht vom Compiler, sondern von der libc ab ;).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.