Noté que la memoria para el vector se asigna dinámicamente. Entonces, para un vector local, ¿dónde se asigna la memoria?¿Dónde se asigna la memoria para un vector local de C++?
f(){
vector<int> vi;
}
Noté que la memoria para el vector se asigna dinámicamente. Entonces, para un vector local, ¿dónde se asigna la memoria?¿Dónde se asigna la memoria para un vector local de C++?
f(){
vector<int> vi;
}
El vector está asignado en la pila (28 bytes en mi sistema). Los contenidos vectoriales se asignan en el montón.
Para ampliar la respuesta de Yacoby, RAII significa que cuando vi
sale del ámbito, cualquier cosa asignado con new
(dentro del vector) es delete
d (en destructor del vector). Así es como se mezclan la asignación de pila y montón.
Puede cambiar la forma en que se asigna la memoria para contenedores STL con la combinación de tipo de plantilla de asignación y el objeto asignador pasado al constructor.
Hice una pregunta sobre cómo hacer un almacenamiento de pila de uso de vector y obtuve this answer. Puede que le resulte interesante.
+1 Muy interesante ... – Skilldrick
Definitivamente +1 de mí. – Yacoby
El vector
se asigna dondequiera que el allocator
que utiliza decide asignar. En el caso predeterminado std::allocator
, usa ::operator new()
.
¿Qué quiere decir con "dónde"? ¿Estás hablando de montón contra pila? – Toji
Sí, me refiero a la pila frente al montón – skydoor