#include "Arduino.h"
#include <deque>
#include <esp_system.h> //mem
std::deque<char*> v_audioContent;
using namespace std;
void vector_clear_and_shrink(deque<char*>&vec);
void setup() {
Serial.begin(115200);
uint32_t ms = millis();
Serial.println("BEGIN------------------------");
mem();
for (uint8_t f = 0; f < 10; f++)
{
add();
while (v_audioContent.size() > 0) {
// const char* s = (const char*)v_audioContent.front();
// Serial.printf("%s\n", s);
Serial.printf("%s\n", v_audioContent.front());
v_audioContent.pop_front();
}
if (v_audioContent.empty())
vector_clear_and_shrink(v_audioContent); // free memory
Serial.print("FOR------------------------:");
Serial.println(f);
mem();
}
Serial.println("END deque------------------------");
mem();
Serial.print("TIME:"); Serial.println(millis() - ms);
}
void loop() {
delay(1000);
}
//-----------------------------ADD
void add() {
String ruString;
/*
//v_audioContent.insert(v_audioContent.begin(), strdup(file.path()));
String s = "Привет 1234ж;";
//v_audioContent.insert(v_audioContent.begin(), strdup(s));
v_audioContent.push_back(strdup(s.c_str()));
const char* c = "2Привет 1234ж;2";
v_audioContent.push_back( strdup(c));
c = "3Привет 1234ж;3";
v_audioContent.push_back( strdup(c));
*/
char* p;
for (int n = 0; n < 1000; n++)
{
ruString = String(n);
p = strdup (ruString.c_str());
v_audioContent.push_back((char*)p);
// Serial.println(v_audioContent.back());
//Serial.println(p);
//free(p);
}
// free(p);
//Serial.println("END-------ADD");
}
//-----------------------------FREE
void vector_clear_and_shrink(deque<char*>&vec)
{
uint16_t size = vec.size();
for (int i = 0; i < size; i++)
{
if (vec[i]) {
free(vec[i]);
vec[i] = NULL;
}
Serial.println("shrink-----------------------");
}
vec.clear();
vec.shrink_to_fit();
}
//-----------------------------MEM
void mem()
{
uint32_t freeHeapBytes = heap_caps_get_free_size(MALLOC_CAP_DEFAULT);
uint32_t totalHeapBytes = heap_caps_get_total_size(MALLOC_CAP_DEFAULT);
float percentageHeapFree = freeHeapBytes * 100.0f / (float)totalHeapBytes;
// Print to serial
Serial.printf("[Memory] %.1f%% free - %d of %d bytes free\n", percentageHeapFree, freeHeapBytes, totalHeapBytes);
uint32_t Free = ESP.getFreeHeap();
uint32_t alloc = ESP.getMaxAllocHeap();
Serial.print("Free:"); Serial.print(Free);
Serial.print(" alloc:"); Serial.println(alloc);
}