#include "Arduino.h"
#include <vector>
std::vector<char*> v_audioContent;
using namespace std;
void vector_clear_and_shrink(vector<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[v_audioContent.size() -1];
Serial.printf("%s\n", s);
v_audioContent.pop_back();
}
if(v_audioContent.size() == 0)
vector_clear_and_shrink(v_audioContent); // free memory
Serial.print("FOR------------------------:");
Serial.println(f);
mem();
}
Serial.println("END VECTOR------------------------");
mem();
Serial.print("TIME:");Serial.println(millis()-ms);
}
void loop(){
delay(1000);
}
void add(){
String ruString;
for(int n=0;n<1000;n++)
{
ruString=String(n);
v_audioContent.insert(v_audioContent.begin(),strdup(ruString.c_str()));
}
}
void vector_clear_and_shrink(vector<char*>&vec)
{
// uint size = vec.size();
uint size = vec.capacity();
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);
}