Hi,
I made a short example (ESP32 WEMOS Lolin32, Arduino framework, VSCode, latest PIO):
RamTest.h:
#pragma once
#include <string>
using std::string;
class RamTest {
public:
string GetString(uint8_t num_);
};
RamTest.cpp:
#include "RamTest.h"
string RamTest::GetString(uint8_t num_) {
switch (num_) {
case 0:
return "bliblablubbliblablubbliblablubbliblablubbliblablub";
case 1:
return "ladidaladidaladidaladidaladidaladidaladidaladidalad";
case 2:
return "flibedidaflipflapflibedidaflipflapflibedidaflipflap";
case 3:
return "bidibidibidibidibidibidibidibidibidibidibidibidib";
case 4:
return "naknaknaknaknaknaknaknaknaknaknaknaknaknaknaknaknak";
case 5:
return "rollheadoverkeyboardrollheadoverkeyboardrollheadove";
case 6:
return "thisisatestthisisatestthisisatestthisisatestthisisa";
case 7:
return "boooooringboooooringboooooringboooooringboooooringb";
case 8:
return "kappadeltagammacetakappadeltagammacetakappadeltagamc";
case 9:
return "thatsenoughthatsenoughthatsenoughthatsenoughthatsen2";
case 10:
return "bliblablubbliblablubbliblablubbliblablubbliblablub2";
case 11:
return "ladidaladidaladidaladidaladidaladidaladidaladidalad2";
case 12:
return "flibedidaflipflapflibedidaflipflapflibedidaflipflap2";
case 13:
return "bidibidibidibidibidibidibidibidibidibidibidibidib2";
case 14:
return "naknaknaknaknaknaknaknaknaknaknaknaknaknaknaknaknak2";
case 15:
return "rollheadoverkeyboardrollheadoverkeyboardrollheadove2";
case 16:
return "thisisatestthisisatestthisisatestthisisatestthisisat2";
case 17:
return "boooooringboooooringboooooringboooooringboooooringboo2";
case 18:
return "kappadeltagammacetakappadeltagammacetakappadeltagamma2";
case 19:
return "thatsenoughthatsenoughthatsenoughthatsenoughthatsenou2";
default:
return "defaultdefaultdefaultdefaultdefaultdefaultdefaultdefaul2";
}
return "";
}
main.cpp:
#include <Arduino.h>
#include "RamTest.h"
void setup() {
}
void loop() {
RamTest ramTest;
ramTest.GetString(0);
}
I do not even need to add the RamTest.h in main.cpp and call the method once. As soon as the RamTest - files are available in the src-folder, the memory inspection returns:
112.1 KB RAM (251.2 KB Flash)
if I comment out the switch-statement (only “” is returned), it says:
110,9 KB RAM (246,6 KB Flash)
My problem is the RAM usage:
I have 20 strings (different, same seems not to count) with a size of ~50+ chars = 1000 bytes, which matches the RAM increasing - if all strings are called for, and kept.
In practice, I call for (one of) those strings locally, and they get out of scope shortafter.
When I inspect my projects, and the RAM usage is very high, after ths test I assume they just show me the RAM usage if all returns and all variables are created at once? In reality, there will be much more free RAM available (depending on code, and with some of these methods in it)?
Is this by design?
Or - do I oversee something?