Skip to content

Instantly share code, notes, and snippets.

@amcjen
Created March 13, 2014 21:10
Show Gist options
  • Save amcjen/9537054 to your computer and use it in GitHub Desktop.
Save amcjen/9537054 to your computer and use it in GitHub Desktop.
malloc/free test
#include <Arduino.h>
#include "memdebug.h"
void shuffle(void **array, int n);
void showmem();
void dotest(bool shuffle);
// Compatibility stub for undefined pure virtual
extern "C" void __cxa_pure_virtual() { for(;;); }
int main(void)
{
init();
Serial.begin(115200);
dotest(false);
dotest(true);
// freeze the mcu until reset
delay(1000);
exit(0);
}
void dotest(bool shuffle_)
{
void *ptrs[50];
uint16_t i;
Serial.println("allocating");
showmem();
for(i=0;i<sizeof(ptrs)/sizeof(ptrs[0]);i++)
{
ptrs[i]=malloc(640);
showmem();
}
if(shuffle_)
shuffle(ptrs,sizeof(ptrs)/sizeof(ptrs[0]));
Serial.println("freeing");
for(i=0;i<sizeof(ptrs)/sizeof(ptrs[0]);i++)
{
free(ptrs[i]);
showmem();
}
}
void showmem()
{
char buffer[100];
sprintf(buffer,"%04u %04u %04u : used/free/large",
getMemoryUsed(),
getFreeMemory(),
getLargestAvailableMemoryBlock()
);
Serial.println(buffer);
}
int rand_int(int n)
{
int limit = RAND_MAX - RAND_MAX % n;
int rnd;
do
{
rnd = rand();
} while (rnd >= limit);
return rnd % n;
}
void shuffle(void **array, int n)
{
int i, j;
void *tmp;
for (i = n - 1; i > 0; i--)
{
j = rand_int(i + 1);
tmp = array[j];
array[j] = array[i];
array[i] = tmp;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment