Я сталкиваюсь с некоторыми серьезными утечками памяти в моем приложении, поэтому я настроил это чрезвычайно простое решение, чтобы проверить, что происходит, когда массив String выходит из области видимости ...
Я знаю, что старая реализация TextStringof String отсутствовал деструктор, но, похоже, в текущей реализации он есть.
Я использую эту библиотеку MemoryFree ( Обратите внимание, что этот связанный код теперь исправлен на основе принятогоответ на этот вопрос ).
В коде рассматриваются два сценария: выделение массива char и массива строк в двух разных функциях для принудительного выхода из области видимости в обоих случаях.
#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 */ }
Вывод:
CHAR *: до 1710 года, после 1710 года, разница 0STRING: до 1645 года, после 1309 года, Diff 336
Почему выделение массива String
не стирается из памяти?