Problems with memory on the Gamebuino Meta



1 year ago

Hello everyone,

It seems there is a problem in the Gamebuino Meta, or at least in the Meta's Library.

I am currently developing a Rogue-like game. In order to save the terrain I need to create a big, matrix-like array, in which I put every tile's value. On simple tests (for example a map of 10 * 10 tiles), it works as excepted.

But when the map grows (for example with a map of 80 * 64 tiles, there is a very strange behavior.

Consider the following program:

#include <Gamebuino-Meta.h>

const int sizeX = 80;
const int sizeY = 64;

// nothing interesting in this part
void setup() {

void loop()
  // we artificially create an array of a "big" size...
  int *terrain = new int [sizeX * sizeY];
  // ... and we put zeros inside it
  for (int i = 0; i < sizeX * sizeY; i ++)
   terrain[i] = 0;

  // now we create some colors
  Color white = gb.createColor(255, 255, 255);
  Color red = gb.createColor(255, 0, 0);

  // we draw the array on the screen
  for (int y = 0; y < sizeY; y ++)
    for (int x = 0; x < sizeX; x ++)
      // we plot a different color depending on the value of an element of the array
      switch (terrain[y * sizeX + x])
        case 0:
          gb.display.drawPixel(x, y, white);
          gb.display.drawPixel(x, y, red);
  delete [] terrain;

So what do you expect from this program ?

If you understand my code, you can expect to see white everywhere, since the array is (or should be) full of zeros.
But here is what I get with the META Emulator:

(I get the same thing with my real Gamebuino Meta

Am I the only one who does not understand ?

In my humble opinion I think it is a memory issue. But I have not enough skills in C++ to solve it. What have I done wrong ? Can someone help me ?

Please help me.

Best regards, 


PS : please forgive my poor English, do not hesitate to ask if you don't understand.


NEW 1 year ago

You are probably RAM overflowing

int *terrain = new int [sizeX * sizeY];

As sizeX is 80 and sizeY is 64 that are 5120 entries.....with it being an int array (one int is 4 bytes large) that makes 20k bytes. The internal screen buffer is already 10k.

The META only has 32k RAM


NEW 1 year ago

To follow up on Sorunome's reply, as I also found out, you have to be very efficient in how you use your memory. In your case, do you really need a 4-byte int for each terrain position? I assume a 1-byte int (int8_t) will also suffice. Depending on the "resolution" you need, you may even be able to store two terrain positions in a single byte, using bit shifting and bit masks. Also, you are allocating and releasing the array each iteration of the loop. I recommend declaring it outside the loop instead. 


NEW 1 year ago


First thank you for your incredibly fast answer.

You pointed out the fact my code does not manage RAM efficiently... and you are right. I'm very sorry, I didn't think about it before : I though it was a bug (or something like that) in the Gamebuino library... how stupid I am ^^

Thank you very much for your answer, I'll optimize my code further.

Have a nice day

PS : in the code posted, I create a new array at each loop, I did it because I wanted to post something easy to read for someone who never saw my code before (the code on my computer is much, much uglier).

Thank you again

You must be logged in in order to post a message on the forum

Log in