#include #include #include "posix_lock.h" #include "other.h" #include "LeaHeader.h" static char * borderPtr = NULL; void setHeaders (char * ptr,unsigned int sz) { sz = req_padding(sz); setSize(ptr,sz); markInUse(ptr); setPrevSize(getNext(ptr),sz); setSize(getNext(ptr),0);//border block markInUse(getNext(ptr));//border block } void *sys_alloc(unsigned int size) { unsigned int allocation_size; void *ptr; sbrk_lock(); allocation_size = req_padding(size) + HDR_SIZE; if (borderPtr == NULL) { ptr = sbrk(allocation_size + 2*HDR_SIZE); //extra space for coalescing support if (ptr == (void *) -1){ printf("sbrk Fail\n"); return NULL; } //printf("sbrk = %p\n",ptr); setPrevSize(ptr + HDR_SIZE,0); markPrevInUse(ptr + HDR_SIZE); borderPtr = ptr; } else { ptr = sbrk(allocation_size); if ((ptr == (char *) -1)){ printf("sbrk Fail: out of Memory\n"); return NULL; } if((ptr != borderPtr + 2*HDR_SIZE)){ printf("sbrk Fail: Non-contiguous Memory\n"); return NULL; } } ptr = borderPtr + HDR_SIZE; borderPtr += allocation_size; setHeaders(ptr,size); sbrk_unlock(); return (void *) ptr; }