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