estoy corriendo en algunos graves pérdidas de memoria en mi solicitud, por lo que esta configuración solución extremadamente desnuda para probar lo que sucede cuando una matriz de cadenas se sale del ámbito ...array Alfa no cancela la asignación al salir alcance
que sé que la antigua implementación TextString de String carecía de un destructor, pero esta implementación actual parece tenerlo.
Estoy usando this MemoryFree library (Tenga en cuenta que este código vinculado se ha solucionado en función de la respuesta aceptada a esta pregunta).
El código examina dos escenarios: Asignación de matriz de caracteres y matriz de cadenas en dos funciones diferentes para forzar la salida del ámbito en ambas.
#include <MemoryFree.h>
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
int freeBefore, freeAfter;
//TEST ALLOCATION OF CHAR ARRAY//
freeBefore = freeMemory();
AllocateCharArr();
freeAfter = freeMemory();
Serial.println("CHAR*: Before " + String(freeBefore)
+ ", After " + String(freeAfter)
+ ", Diff " + String(freeBefore - freeAfter));
//TEST ALLOCATION OF STRING//
freeBefore = freeMemory();
AllocateStringArr();
freeAfter = freeMemory();
Serial.println("STRING: Before " + String(freeBefore)
+ ", After " + String(freeAfter)
+ ", Diff " + String(freeBefore - freeAfter));
}
void AllocateCharArr() {
char s[100];
}
void AllocateStringArr() {
String s[100];
}
void loop() { /* empty */ }
Salida:
char *: Antes de 1710, después de 1710, Dif 0
cadena: Antes de 1645, después de 1309, Dif 336
¿Cómo es que la asignación String
gama no se borró de la memoria?
¿Cuál es el resultado cuando el array 'string' es mucho más pequeñas (por ejemplo, 10 elementos)? – ouah
Interesante: 50 elementos = diff 136, 25 elementos = diff 36, 10 elementos = diff 0 –
¿Qué versión del software Arduino está usando (0023, 1.0, ...)? –