Me gustaría saber cuánta RAM estoy usando en mi proyecto, por lo que puedo decir, no hay forma de resolverlo (aparte de calcularlo yo mismo). Llegué a una etapa en un proyecto bastante grande donde he determinado que me estoy quedando sin RAM.
He determinado esto porque puedo agregar una sección y luego todo el infierno se desata en otro lugar en mi código sin razón aparente. Si salgo #ifndef
algo más, funciona de nuevo. No hay nada programáticamente incorrecto con el nuevo código.
Sospeché por un tiempo que estaba llegando al final de la RAM disponible. No creo que esté usando demasiada pila (aunque es posible), ¿cuál es la mejor manera de determinar cuánta RAM estoy usando realmente?
Revisando e intentando resolverlo, tengo problemas cuando llego a enumeraciones y estructuras; ¿Cuánta memoria cuestan?
primera edición: TAMBIÉN, he editado mucho mi boceto desde que comencé, estos no son los resultados reales que obtuve inicialmente, pero son lo que estoy obteniendo ahora.
text data bss dec hex filename
17554 844 449 18847 499f HA15_20140317w.cpp.elf
16316 694 409 17419 440b HA15_20140317w.cpp.elf
17346 790 426 18562 4882 HA15_20140317w.cpp.elf
La primera línea (con el texto 17554) no funcionaba, después de mucha edición, la segunda línea (con el texto 16316) funciona como debería.
editar: la tercera línea tiene todo funcionando, lectura en serie, mis nuevas funciones, etc. Básicamente eliminé algunas variables globales y código duplicado. Menciono esto porque (como se sospecha) no se trata de este código en sí, sino del uso de RAM. Lo que me lleva de vuelta a la pregunta original, "cómo medirla mejor" Todavía estoy revisando algunas respuestas, gracias.
¿Cómo interpreto realmente la información anterior?
Hasta ahora mi entendimiento es:
`TEXT` is program instruction memory
`DATA` is variables (unitialised?) in program memory
`BSS` is variables occupying RAM
dado que BSS es considerablemente menor que 1024 bytes, ¿por qué funciona el segundo, pero el primero no? Si es así, DATA+BSS
ambos ocupan más de 1024.
reeditar: edité la pregunta para incluir el código, pero ahora la eliminé porque realmente no tenía nada que ver con el problema (aparte de quizás prácticas de codificación deficientes, declaraciones de variables y similares). Puede revisar el código al revisar las ediciones si realmente desea verlo. Quería volver a la pregunta en cuestión, que estaba más basada en: Cómo medir el uso de RAM.
String
escribir en tus programas? Se sabe que esto realiza asignaciones y lanzamientos frecuentes de memoria dinámica, que pueden fragmentar el montón hasta el punto en que no queda memoria.
String
s debido a la sobrecarga. Estoy trabajando feliz con arrays de char, dicho esto, casi siempre me defino todos mis arreglos de char con un tamaño fijo (por el momento, tengo una matriz de bytes que no es puramente debido a que cambie la longitud del contenido para diferentes recompilaciones.