La pila es un área de memoria importante manejada por la UCP para almacenar datos durante la ejecución de un programa. Funciona bajo el principio LIFO, similar a una pila de platos. Se usa para almacenar variables locales y datos de invocación de funciones de forma anidada. Los objetos en la pila son destruidos automáticamente cuando salen de su ámbito.
1. 1.4.2 Pila (quot;
Stack Segmentquot;
)<br />Es un área muy importante manejada directamente por la UCP para alojar datos durante la ejecución del programa. Su nombre deriva de su propio mecanismo de funcionamiento. Es un almacén de datos contiguos del tipo LIFO.<br />Frecuentemente es comparada con una pila de platos; el último en ser colocado es el primero en ser retirado.<br />Se usa para muchas cosas, por ejemplo, aquí se almacenan las variables locales automáticas y los datos involucrados en el mecanismo de invocación de funciones, de forma que si se utilizan muchas de estas invocaciones forma anidada o recursiva, la pila crece. En algunos sistemas, la pila y el montón son contiguos y el crecimiento desmesurado de la pila puede llegar a sobrescribir el área inferior del montón.<br />Los movimientos en el stack son generalmente rápidos, a veces basta una simple instrucción del procesador para almacenar o borrar algo en la pila. Los objetos colocados en ella se asocian a una duración automática. . El término se refiere a que es el compilador el que determina cuando se destruyen. El lenguaje C++ se caracteriza por hacer un uso extensivo de la pila (muchos objetos son quot;
automáticosquot;
por defecto) y el mecanismo de invocación de funciones se basa en su utilización. Decimos que C++ es un lenguaje orientado a la pila.<br />La localización y desalojo de variables de la pila se realiza de forma automática (son decisiones tomadas por el compilador), no obstante, la directiva register permite indicar que algunas variables que normalmente irían en esta zona, sean alojadas en los registros del procesador.<br />Precisamente este quot;
automatismoquot;
hace que la llamada explícita al destructor de objetos que hayan sido construidos en esta zona sea extremadamente peligroso, ya que si se realiza antes de que el objeto salga de ámbito, el destructor será llamado de nuevo cuando sea liberado el marco de la pila correspondiente a dicho ámbito. A cambio la pila presenta la comodidad que supone la destrucción automática de los objetos alojados en ella cuando salen de ámbito (con la liberación de la memoria correspondiente), lo que supone que no hay peligro de pérdidas inadvertidas porque el programador olvide destruir el objeto. Es el siguiente caso:<br />class MiClase { ......} ...<br />{ // un ámbito cualquiera... ....<br /> MiClase objeto1;<br /> ....<br />} // Ok. objeto1 es destruido al llegar a este punto<br />