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