Von dem, was here geschrieben ist, weist new
in freien Speicher während malloc
Haufen verwendet und die beiden Begriffe bedeuten oft das Gleiche.Ist es sicher, Speicher neu zuzuweisen?
Von was here geschrieben wird, kann realloc
den Speicherblock an einen neuen Speicherort verschieben. Wenn Free Store und Heap zwei verschiedene Speicherbereiche sind, bedeutet das dann ein Problem?
Insbesondere würde ich gerne wissen, ob es sicher ist,
int* data = new int[3];
// ...
int* mydata = (int*)realloc(data,6*sizeof(int));
Wenn nicht zu verwenden, gibt es eine andere Art und Weise zu realloc
mit new
sicher zugewiesenen Speicher? Ich könnte neuen Bereich und memcpy
den Inhalt zuweisen, aber von dem, was ich verstehe realloc
kann den gleichen Bereich verwenden, wenn möglich.
Verwenden Sie einfach einen 'Vektor'. –
@KarolyHorvath Woher wissen Sie, dass das in jedem Fall ein gangbarer Weg ist? Was ist mit der Bereitstellung eines eingebetteten Systems ohne Standardbibliotheksunterstützung? Was ist mit der Integration mit einer C-Schnittstelle, die eine Realloc durchführen kann? –
@KarolyHorvath Sie können gerne messen, wie viel Zeit benötigt wird, um 200 MB Speicher mit 'malloc' (wenige Mikrosekunden) vs.' std :: vector' (~ 200 Millisekunden!) Zuzuweisen. 'std :: vector' ist keine magische Lösung für jedes Speicherproblem –