Tenga en cuenta que las "variables automáticas" en C no persisten fuera de las invocaciones individuales de una subrutina, y generalmente se asignan dinámicamente en la pila. Por lo tanto, no se muestran en un archivo de mapa porque no existen en ese nivel.
Sin embargo, consumen espacio de pila. Debe asegurarse de que la cantidad de memoria disponible para la pila sea suficiente para el agrupamiento de subrutinas en el peor de los casos que se producirán en su proyecto. Eso puede ser difícil de saber. Algunas suites de desarrollo tienen herramientas para ayudar con eso.
Un truco para tener una idea del uso de la pila es cargar toda el área de la pila con un patrón de datos específico. Deje que el sistema se ejecute mientras espera ejercitar todos los casos. Luego mire el área de la pila con un depurador y vea qué tan profundo llegó al encontrar dónde se sobrescribió el patrón original. Tenga en cuenta que esto solo le muestra la profundidad de la pila durante la prueba, no la profundidad que puede alcanzar. Este método depende de qué tan bien ejerció el sistema durante la prueba.
Algunos procesadores, como el PIC 24 y la serie dsPIC de Microchip, tienen un medio para que el hardware detecte una escritura cerca del final de la pila. Esto se hace con el registro de límite de pila. Se genera una captura si los datos de la pila se escriben más allá del límite.
Añadido sobre "colas"
Como Dave Tweed señaló en un comentario, algo llamado "cola" puede no asignarse dinámicamente en la pila. En ese caso, reside permanentemente en la memoria.
Sin embargo, algunas cadenas de herramientas agrupan toda la memoria privada pero estáticamente asignada de un módulo como un número en el archivo de mapa. En realidad, esto sería por módulo por sección , pero normalmente toda esa memoria estaría en una sola sección a menos que se esforzara por definirlo de otra manera.
Si su cadena de herramientas hace esto, hay varias opciones para hacer que el tamaño de las variables privadas específicas se deletree en el archivo del vinculador:
- Declare que la variable está en una sección especial. Todas las cadenas de herramientas que he visto le mostrarán los tamaños de las secciones asignadas estáticamente de una forma u otra.
- Declara la variable global. Esta es una mala práctica de software si la variable solo tiene acceso dentro del módulo, por lo que lo hace temporalmente solo para ver el resultado en el archivo de mapa.
- Algunos sistemas tienen una configuración que hace que las variables privadas pero asignadas estáticamente se muestren individualmente en el archivo de mapa.