common.c (873B)
1 #include <stddef.h> 2 3 #define MALLOC_PAGE_SIZE 1024 4 #define STACK_OFFSET 1024 5 6 extern unsigned char __heap_base; 7 8 void *malloc(size_t c) { 9 int i; 10 int n; 11 int offset; 12 unsigned char *offset_p; 13 14 unsigned char *ptr; 15 unsigned char *base = (unsigned char*)(&__heap_base); 16 17 offset = *((int*)(base)) + STACK_OFFSET; 18 19 n = (c / MALLOC_PAGE_SIZE) + 1; 20 n *= MALLOC_PAGE_SIZE; 21 22 ptr = base + offset; 23 24 offset += n; 25 offset_p = (unsigned char*)&offset; 26 for (i = 0; i < 4; i++) { 27 *(base+i) = *(offset_p+i); 28 } 29 30 offset = *((int*)(base)); 31 32 return (void*)ptr; 33 } 34 35 void *memset(void *p, int v, size_t c) { 36 int i; 37 38 for (i = 0; i < c; i++) { 39 *((char*)(p+i)) = *((char*)(v+i)); 40 } 41 return p; 42 } 43 44 void *memcpy(void *dst, const void *src, size_t c) { 45 int i ; 46 47 for (i = 0; i < c; i++) { 48 *((char*)(dst+i)) = *((char*)(src+i)); 49 } 50 return dst; 51 } 52 53 void free(void *ptr) { 54 return; 55 }