Suga koubou
/
malloc_test
http://mbed.org/users/okini3939/notebook/mbed256_memory/
main.cpp@0:84a4229a4f34, 2011-07-16 (annotated)
- Committer:
- okini3939
- Date:
- Sat Jul 16 06:16:02 2011 +0000
- Revision:
- 0:84a4229a4f34
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okini3939 | 0:84a4229a4f34 | 1 | #include "mbed.h" |
okini3939 | 0:84a4229a4f34 | 2 | #include <new> |
okini3939 | 0:84a4229a4f34 | 3 | #include <setjmp.h> |
okini3939 | 0:84a4229a4f34 | 4 | |
okini3939 | 0:84a4229a4f34 | 5 | #define MAX 320 |
okini3939 | 0:84a4229a4f34 | 6 | |
okini3939 | 0:84a4229a4f34 | 7 | #undef USE_MALLOC // malloc or new |
okini3939 | 0:84a4229a4f34 | 8 | |
okini3939 | 0:84a4229a4f34 | 9 | Serial pc(USBTX, USBRX); |
okini3939 | 0:84a4229a4f34 | 10 | jmp_buf jbuf; |
okini3939 | 0:84a4229a4f34 | 11 | |
okini3939 | 0:84a4229a4f34 | 12 | void no_memory () { |
okini3939 | 0:84a4229a4f34 | 13 | pc.printf("new: no memory!\r\n"); |
okini3939 | 0:84a4229a4f34 | 14 | longjmp(jbuf, 1); |
okini3939 | 0:84a4229a4f34 | 15 | // exit(-1); |
okini3939 | 0:84a4229a4f34 | 16 | } |
okini3939 | 0:84a4229a4f34 | 17 | |
okini3939 | 0:84a4229a4f34 | 18 | int main() { |
okini3939 | 0:84a4229a4f34 | 19 | volatile int i; // volatile |
okini3939 | 0:84a4229a4f34 | 20 | int j; |
okini3939 | 0:84a4229a4f34 | 21 | char *dummy[MAX]; |
okini3939 | 0:84a4229a4f34 | 22 | |
okini3939 | 0:84a4229a4f34 | 23 | // set_new_handler(0); // return null |
okini3939 | 0:84a4229a4f34 | 24 | set_new_handler(no_memory); // new handler function |
okini3939 | 0:84a4229a4f34 | 25 | |
okini3939 | 0:84a4229a4f34 | 26 | if (setjmp(jbuf) == 0) { |
okini3939 | 0:84a4229a4f34 | 27 | // allocate to memory |
okini3939 | 0:84a4229a4f34 | 28 | |
okini3939 | 0:84a4229a4f34 | 29 | for (i = 0; i < MAX; i ++) { |
okini3939 | 0:84a4229a4f34 | 30 | pc.printf("%d, ", i); |
okini3939 | 0:84a4229a4f34 | 31 | #ifdef USE_MALLOC |
okini3939 | 0:84a4229a4f34 | 32 | dummy[i] = (char*)malloc(100); |
okini3939 | 0:84a4229a4f34 | 33 | #else |
okini3939 | 0:84a4229a4f34 | 34 | dummy[i] = new char[100]; |
okini3939 | 0:84a4229a4f34 | 35 | #endif |
okini3939 | 0:84a4229a4f34 | 36 | if (dummy[i] == NULL) { |
okini3939 | 0:84a4229a4f34 | 37 | pc.printf("malloc: no memory!\r\n"); |
okini3939 | 0:84a4229a4f34 | 38 | break; |
okini3939 | 0:84a4229a4f34 | 39 | } |
okini3939 | 0:84a4229a4f34 | 40 | } |
okini3939 | 0:84a4229a4f34 | 41 | |
okini3939 | 0:84a4229a4f34 | 42 | } else { |
okini3939 | 0:84a4229a4f34 | 43 | // return from longjmp |
okini3939 | 0:84a4229a4f34 | 44 | |
okini3939 | 0:84a4229a4f34 | 45 | } |
okini3939 | 0:84a4229a4f34 | 46 | |
okini3939 | 0:84a4229a4f34 | 47 | pc.printf("allocated %d Bytes\r\n", i * 100); |
okini3939 | 0:84a4229a4f34 | 48 | |
okini3939 | 0:84a4229a4f34 | 49 | for (j = 0; j < i; j ++) { |
okini3939 | 0:84a4229a4f34 | 50 | #ifdef USE_MALLOC |
okini3939 | 0:84a4229a4f34 | 51 | delete [] dummy[j]; |
okini3939 | 0:84a4229a4f34 | 52 | #else |
okini3939 | 0:84a4229a4f34 | 53 | free(dummy[j]); |
okini3939 | 0:84a4229a4f34 | 54 | #endif |
okini3939 | 0:84a4229a4f34 | 55 | } |
okini3939 | 0:84a4229a4f34 | 56 | |
okini3939 | 0:84a4229a4f34 | 57 | } |