Я использую серьезные утечки памяти в своем приложении, поэтому я настраиваю это чрезвычайно простое решение для проверки того, что происходит, когда массив String выходит из области видимости...
Я знаю, что в старой реализации String TextString отсутствовал деструктор, но эта текущая реализация, похоже, имеет его.
Я использую эту библиотеку 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 года, Diff 0
STRING: до 1645, после 1309, Diff 336
Каким образом распределение массива String
не удаляется из памяти?