Created
March 13, 2014 21:10
-
-
Save amcjen/9537054 to your computer and use it in GitHub Desktop.
malloc/free test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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