Da quanto scritto here, new
assegna in negozio libera mentre malloc
usa mucchio ei due termini spesso significano la stessa cosa.È sicuro allocare la memoria allocata con nuova?
Da quanto scritto here, realloc
è possibile spostare il blocco di memoria in una nuova posizione. Se la memoria e l'heap liberi sono due spazi di memoria diversi, vuol dire quindi qualche problema?
In particolare mi piacerebbe sapere se è sicuro da usare
int* data = new int[3];
// ...
int* mydata = (int*)realloc(data,6*sizeof(int));
In caso contrario, c'è qualche altro modo per realloc
memoria allocata con new
in modo sicuro? Potrei assegnare nuova area e memcpy
il contenuto, ma da quello che capisco realloc
potrebbe utilizzare la stessa area, se possibile.
Basta usare un 'vector'. –
@KarolyHorvath Come fai a sapere che è un approccio praticabile in ogni caso? Che dire della distribuzione di un sistema embedded senza il supporto della libreria standard? Che dire dell'integrazione con un'interfaccia C che può eseguire un realloc? –
@KarolyHorvath siete invitati a valutare quanto tempo è necessario per allocare 200 MB di memoria con 'malloc' (pochi microsecondi) rispetto a' std :: vector' (~ 200 millisecondi!). 'std :: vector' non è una soluzione magica per ogni problema di memoria –