c++ - una - ¿Cuál es la diferencia entre el montón y la tienda libre?
se puede dejar la lavadora con agua toda la noche (3)
Esta pregunta ya tiene una respuesta aquí:
- C ++, Free-Store vs Heap 7 respuestas
Originalmente, una guerra de pedantes en @Als responde here , también provocó una discusión en la sala de chat de C ++.
Este artículo de Herb Sutter distingue entre los dos, pero también tiene más de una década, como claramente se escribió antes del 2000 y también habla sobre el borrador estándar, que solo puede significar el borrador de C ++ 98. Sin embargo, todavía espero que Herb, como parte del comité, tenga conocimiento de esto.
Sé de this y de esta pregunta / respuesta, pero el segundo simplemente cita el artículo de Herb, mientras que el primero cita otra fuente que simplemente rechaza el uso del término "montón", alias ambos no son exactamente satisfactorios. Además, no puedo encontrar ninguna etiqueta de free-store
o freestore
en SO (hasta esta pregunta, creé la anterior ahora).
Ahora, ¿cuál es realmente la diferencia, si la hay?
Bueno, el estándar actual de C ++ solo usa el término "tienda libre"; el único uso de "montón" en el estándar es describir la estructura de datos del montón en la biblioteca estándar. Entonces, "montón" no es un término muy útil para usar cuando se trata de discutir los problemas de C ++ con precisión, aunque, por supuesto, todos lo hacen.
En el libro de Herb "Exceptional C ++", él define:
Montón: un área de memoria dinámica asignada / liberada por las funciones malloc
/ free
.
Tienda libre: un área de memoria dinámica asignada / liberada por new
/ delete
.
Es posible que las new
y delete
se implementen en términos de malloc
y free
, por lo que técnicamente, podrían ser la misma área de memoria. Sin embargo, como el estándar no especifica esto, es mejor tratarlos por separado, y no mezclar malloc
/ delete
o new
/ free
.
Técnicamente, la free-store
no es el montón, al igual que las variables locales técnicamente no están en la pila. Sin embargo, es extremadamente raro en mi experiencia encontrar a alguien que no acepte esos términos.