Ho notato che la memoria per il vettore è allocata dinamicamente. Quindi per un vettore locale, dove viene allocata la memoria?Dove è allocata la memoria per un vettore C++ locale?
f(){
vector<int> vi;
}
Ho notato che la memoria per il vettore è allocata dinamicamente. Quindi per un vettore locale, dove viene allocata la memoria?Dove è allocata la memoria per un vettore C++ locale?
f(){
vector<int> vi;
}
Il vettore è allocato sulla pila (28 byte sul mio sistema). I contenuti vettoriali sono allocati nell'heap.
Per espandere sulla risposta Yacoby, RAII significa che quando vi
va fuori portata, nulla allocato con new
(all'interno del vettore) è delete
d (in distruttore del vettore). È così che si mescolano stack e heap allocation.
È possibile modificare la modalità di allocazione della memoria per i contenitori STL con la combinazione del tipo di modello Allocator e l'oggetto allocator passato al costruttore.
Ho fatto una domanda su come creare un vettore per l'archiviazione dello stack e ottenuto this answer. Potrebbe essere interessante.
+1 Molto interessante ... – Skilldrick
Definito +1 da me. – Yacoby
Il vector
viene assegnato ovunque lo allocator
utilizza da cui decide di allocare.
Nel caso predefinito di std::allocator
, utilizza ::operator new()
.
Cosa intendi con "dove"? Stai parlando di heap o stack? – Toji
Sì, intendo stack vs. heap – skydoor