#include "Arduino.h"
//#include <string>
#include <deque>
//#include <esp_system.h> //mem
using namespace std;
std::deque<String> v_audioContent;
//void vector_clear_and_shrink(deque<String>&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) {
String s = v_audioContent[0];
Serial.printf("%s\n", s);
v_audioContent.pop_front();
}
mem();
//if (v_audioContent.size() == 0)
if (v_audioContent.empty())
vector_clear_and_shrink(v_audioContent); // free memory
Serial.print("FOR------------------------:");
Serial.println(f);
}
Serial.println("END deque------------------------");
mem();
Serial.print("TIME:"); Serial.println(millis() - ms);
}
void loop() {
delay(1000);
}
//-----------------------------ADD
void add() {
String ruString = "Привет"; //RU
/*
char cbuffer[ruString.length() + 1] = "";
//Serial.println(myString); // debug
strcpy( cbuffer, ruString.c_str() );
v_audioContent.push_back(String(cbuffer));
String s = "1234Privet;";
//v_audioContent.insert(v_audioContent.begin(), strdup(s));
v_audioContent.push_back(s.c_str());
const char* c = "TESt 1234;2";
v_audioContent.push_back( String(c));
c = "HELLO 1234;3";
v_audioContent.push_back( String(c));
*/
for (int n = 0; n < 1000; n++)
{
ruString = String(n);
// char cbuffer[ruString.length() + 1] = "";
//Serial.println(myString); // debug
// strcpy( cbuffer, ruString.c_str());
v_audioContent.push_back(ruString.c_str());
// String nn = String(n);
//v_audioContent.push_back(n.c_str());
}
}
//-----------------------------FREE
void vector_clear_and_shrink(deque<String>&vec)
{
vec.clear();
vec.shrink_to_fit();
Serial.println("shrink-----------------------");
mem();
}
//-----------------------------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);
}