From a251199b664bc343b6c4e8fdc0b8d97ec46ebc6c Mon Sep 17 00:00:00 2001 From: DocQuantum <shchurgood@gmail.com> Date: Thu, 17 Oct 2019 22:50:47 -0500 Subject: [PATCH] Optimized makefile for debugging, implemented free --- .gitignore | 1 + Makefile | 46 ++++++++++++++++++++---------- mm.c | 82 ++++++++++++++++++++++++++++++------------------------ 3 files changed, 78 insertions(+), 51 deletions(-) diff --git a/.gitignore b/.gitignore index e41adfe..b1e9309 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /.vscode mdriver *.o +description/vm-freespace.pdf diff --git a/Makefile b/Makefile index 9d3cb61..2b89d7f 100644 --- a/Makefile +++ b/Makefile @@ -2,23 +2,41 @@ # Students' Makefile for the Malloc Lab # -CC = gcc -CFLAGS = -Wall -O2 -m32 -g -std=gnu11 +# CC = gcc +# CFLAGS = -Wall -O2 -m32 -g -std=gnu11 -OBJS = mdriver.o mm.o memlib.o fsecs.o fcyc.o clock.o ftimer.o +# OBJS = mdriver.o mm.o memlib.o fsecs.o fcyc.o clock.o ftimer.o -mdriver: $(OBJS) - $(CC) $(CFLAGS) -o mdriver $(OBJS) +# build: $(OBJS) +# $(CC) $(CFLAGS) -o mdriver $(OBJS) +# mdriver.o: +# $(CC) $(CFLAGS) mdriver.c fsecs.h fcyc.h clock.h memlib.h config.h mm.h +# memlib.o: +# $(CC) $(CFLAGS) memlib.c memlib.h +# mm.o: +# $(CC) $(CFLAGS) mm.c mm.h memlib.h +# fsecs.o: +# $(CC) $(CFLAGS) fsecs.c fsecs.h config.h +# fcyc.o: +# $(CC) $(CFLAGS) fcyc.c fcyc.h +# ftimer.o: +# $(CC) $(CFLAGS) ftimer.c ftimer.h config.h +# clock.o: +# $(CC) $(CFLAGS) clock.c clock.h -mdriver.o: mdriver.c fsecs.h fcyc.h clock.h memlib.h config.h mm.h -memlib.o: memlib.c memlib.h -mm.o: mm.c mm.h memlib.h -fsecs.o: fsecs.c fsecs.h config.h -fcyc.o: fcyc.c fcyc.h -ftimer.o: ftimer.c ftimer.h config.h -clock.o: clock.c clock.h +# clean: +# rm -f *~ *.o mdriver -clean: - rm -f *~ *.o mdriver +CC=gcc +CFLAGS=-I. -Wall -O2 -m32 -g -std=gnu11 +DEPS = fsecs.h fcyc.h clock.h memlib.h config.h mm.h +OBJ = mdriver.o mm.o memlib.o fsecs.o fcyc.o clock.o ftimer.o + +%.o: %.c $(DEPS) + $(CC) -c -o $@ $< $(CFLAGS) +mdriver: $(OBJ) + $(CC) -o $@ $^ $(CFLAGS) +clean: + rm -f *~ *.o mdriver \ No newline at end of file diff --git a/mm.c b/mm.c index efa041d..ef2efd6 100644 --- a/mm.c +++ b/mm.c @@ -123,40 +123,45 @@ int mm_init(void) /* $begin mmmalloc */ void *mm_malloc(size_t size) { - size_t asize; /* adjusted block size */ - size_t extendsize; /* amount to extend heap if no fit */ - char *bp; - // printf("call mm_malloc\n"); + size_t asize; /* adjusted block size */ + size_t extendsize; /* amount to extend heap if no fit */ + char *bp; + + //printf("call mm_malloc\n"); - /* Ignore spurious requests */ - if (size <= 0) + /* Ignore spurious requests */ + if (size <= 0) return NULL; - /* Adjust block size to include overhead and alignment reqs. */ - if (size <= WSIZE) + /* Adjust block size to include overhead and alignment reqs. */ + if (size <= WSIZE) asize = WSIZE + OVERHEAD; - else + else asize = DSIZE * ((size + (OVERHEAD) + (DSIZE-1)) / DSIZE); - //printf("asize = %d\n", asize); - - /* Search the free list for a fit */ - if ((bp = find_fit(asize)) != NULL) { + + //printf("asize = %d\n", asize); + + /* Search the free list for a fit */ + if ((bp = find_fit(asize)) != NULL) { place(bp, asize); return bp; - } + } - /* No fit found. Get more memory and place the block */ - extendsize = MAX(asize,CHUNKSIZE); - //printf("extendsize = %d\n", extendsize); - if ((bp = extend_heap(extendsize/WSIZE)) == NULL) - { - printf("mm_malloc = NULL\n"); + /* No fit found. Get more memory and place the block */ + extendsize = MAX(asize,CHUNKSIZE); + //printf("extendsize = %d\n", extendsize); + if ((bp = extend_heap(extendsize/WSIZE)) == NULL) { + printf("mm_malloc = NULL\n"); return NULL; - } - //printf("return address = %p\n", bp); - place(bp, asize); - //mm_checkheap(1); - return bp; + } + + //printf("return address = %p\n", bp); + + place(bp, asize); + + //mm_checkheap(1); + + return bp; } /* $end mmmalloc */ @@ -166,9 +171,12 @@ void *mm_malloc(size_t size) /* $begin mmfree */ void mm_free(void *bp) { - //printf("call mm_free\n"); - - /* You need to implement this function */ + if(!GET_ALLOC(HDRP(bp))){ + *(size_t *)(HDRP(bp)) = *(size_t *)(HDRP(bp)) + 1; + } else { + fprintf(stderr, "Error: memory not alloced or corrupted"); + } + } /* $end mmfree */ @@ -237,17 +245,17 @@ static void *extend_heap(size_t words) static void place(void *bp, size_t asize) /* $end mmplace-proto */ { - size_t csize = GET_SIZE(HDRP(bp)); + size_t csize = GET_SIZE(HDRP(bp)); // printf("csize = %d\n", csize); - if ((csize - asize) >= (DSIZE)) { - PUT(HDRP(bp), PACK(asize, 0)); - bp = NEXT_BLKP(bp); - PUT(HDRP(bp), PACK(csize-asize, 1)); - } - else { - PUT(HDRP(bp), PACK(csize, 0)); - } + if ((csize - asize) >= (DSIZE)) { + PUT(HDRP(bp), PACK(asize, 0)); + bp = NEXT_BLKP(bp); + PUT(HDRP(bp), PACK(csize-asize, 1)); + } + else { + PUT(HDRP(bp), PACK(csize, 0)); + } } /* $end mmplace */ -- GitLab