#include "Arduino.h"
#include <queue>
std::queue<String> v_audioContent;
using namespace std;
void vector_clear_and_shrink(queue<String>&vec);
void setup() {
Serial.begin(115200);
uint32_t ms = millis();
Serial.println("BEGIN------------------------");
mem();
for (uint8_t f = 0; f < 10; f++)
{
add();
mem();
while (!v_audioContent.empty()) {
// const char* s = (const char*)v_audioContent[v_audioContent.size() -1];
String s = v_audioContent.front();
// Serial.printf("%s\n", s);
v_audioContent.pop();
}
//if (v_audioContent.size() == 0)
if (v_audioContent.empty())
vector_clear_and_shrink(v_audioContent); // free memory
Serial.print("FOR------------------------:");
Serial.println(f);
mem();
}
// if(v_audioContent.size() == 0)
// vector_clear_and_shrink(v_audioContent); // free memory
Serial.println("END-queue-----------------------");
uint32_t ms2 = millis();
Serial.print("TIME:"); Serial.println((ms2 - ms));
}
void loop() {
delay(1000);
}
void add() {
String ruString ;
/*
ruString = "Привет"; //RU
char cbuffer[ruString.length() + 1] = "";
//Serial.println(myString); // debug
strcpy( cbuffer, ruString.c_str() );
v_audioContent.push(String(cbuffer));
ruString = "1234Privet;";
v_audioContent.push( ruString);
const char* c = "TESt 1234;2";
v_audioContent.push( 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(ruString.c_str());
// String nn = String(n);
// v_audioContent.push(nn.c_str());
}
}
void vector_clear_and_shrink(queue<String>&vec)
{
/*
uint size = vec.size();
for (int i = 0; i < size; i++) {
if(vec[i]){
free(vec[i]);
vec[i] = NULL;
}
}
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);
}