From 99a6e8f58b9b1e3adfeefdce30fbd660c3a5cfe8 Mon Sep 17 00:00:00 2001
From: nupdoong <pjw930731@naver.com>
Date: Sun, 17 Jun 2018 16:56:44 +0900
Subject: [PATCH] Finish

---
 alloc.c    | 194 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 alloc.h    |  27 ++++++++
 input.txt  |   4 ++
 input2.txt |   3 +
 main       | Bin 0 -> 21828 bytes
 main.c     |  75 ++++++++++++++++++++-
 6 files changed, 302 insertions(+), 1 deletion(-)
 create mode 100644 input.txt
 create mode 100644 input2.txt
 create mode 100755 main

diff --git a/alloc.c b/alloc.c
index 931b9fd..883234f 100644
--- a/alloc.c
+++ b/alloc.c
@@ -1 +1,195 @@
 #include "alloc.h"
+
+#ifndef _SYS/TYPES_H_
+#define _SYS/TYPES_H_
+#include <sys/types.h>
+#endif
+
+#ifndef _STDIO_H_
+#define _STDIO_H_
+#include <stdio.h>
+#endif
+
+void *base=0;
+void *end=0;
+meta *find_location(size_t size);
+extern int type=FIRST;
+
+void *m_malloc(size_t size)
+{
+  meta *target;
+
+  if(base==0){
+    base=sbrk(0);
+    end=base;
+  }
+  if(size%4!=0){
+    size=(size/4+1)*4;
+  }
+  size_t len=size+METASIZE;
+  if(end==base)
+    target=-1;
+  else{
+    target=find_location(size);
+  }
+  if(target==-1 || (!target->next && (!target->free || target->free && target->size<size))){
+    meta *new=end;
+    end+=len;
+    if(sbrk(len)==-1){
+      return 0;
+    }
+    new->free=0;
+    new->next=0;
+    new->prev=target;
+    new->size=size;
+    if(target!=-1){
+      target->next=new;
+    }
+    target=new;
+  }else{
+    m_realloc(target->data,size);
+  }
+  return target->data;
+}
+
+void m_free(void *point)
+{
+  meta *current=point-METASIZE;
+  current->free=1;
+  if(current->next && current->next->free==1){
+    current->size+=current->next->size + METASIZE;
+    current->next=current->next->next;
+  }
+  if(current->prev!=-1){
+    if(current->prev->free){
+      current=current->prev;
+      current->size+=current->next->size+METASIZE;
+      current->next=current->next->next;
+    }
+    if(!current->next){
+      end-=current->size+METASIZE;
+      current->prev->next=0;
+    }
+  }else if(!current->next && !current->prev)
+    end=brk(base);
+  point=0;
+}
+
+meta *find_location(size_t size)
+{
+  meta *index=base,*location=-1;
+  int max=0;
+  int min=2e9;
+  switch(type){
+    case FIRST:
+      for(;;){
+        if(index->free && index->size>=size){
+          location=index;
+          break;
+        }
+        if(index->next==NULL){
+          location=index;
+          break;
+        }
+        index=index->next;
+        if(index==NULL)
+          break;
+      }
+    break;
+    case BEST:
+      for(;;){
+        if(index->free == 1 && index->size >= size && index->size<min){
+     	  location=index;
+     	  min=index->size;
+   	}
+        if(location==-1 && !index->next)
+          location=index;
+        index = index->next;
+        if(index)
+          break;
+      }
+    break;
+    case WORST:
+      for(;;){
+        if((index->size)>=size && index->free){
+          if(index->size>max)
+            location=index;
+        }
+        if(location==-1 && !index->next)
+          location=index;
+        index=index->next;
+	if(index)
+	  break;
+      }
+    break;
+    }
+  return location;
+}
+
+
+void *m_realloc(void* pointer, size_t size){
+  meta *current = pointer-METASIZE;
+
+  if(size%4!=0){
+    size=(size/4+1)*4;
+  }
+
+  if(current->size == size)
+    return pointer;
+
+  else if(current->size < size){
+    if(current->next && current->next->free && current->size + current->next->size + METASIZE>=size){
+      current->size += current->next->size + METASIZE;
+      current->next = current->next->next;
+      current->next->prev = current;
+      if(((current->size)-size) < METASIZE){
+        return pointer;
+      }else{
+        meta *new = (int)current + size + METASIZE;
+        new->prev = current;
+        new->next = current->next;
+        new->size = current->size - size - METASIZE;
+        current->next = new;
+        current->size = size;
+        current->free = 0;
+        m_free(new->data);
+        return current->data;
+      }
+    }else {
+      m_free(current->data);
+      void * new = m_malloc(size);
+      strcpy(new, pointer);
+      return new;
+    }
+  }
+  else if(((current->size)-size) < METASIZE){
+    return pointer;
+  }
+  else{
+    meta *new = (int)current + size + METASIZE;
+    new->prev = current;
+    new->next = current->next;
+    new->size = current->size - size - METASIZE;
+    current->next = new;
+    current->size = size;
+    current->free = 0;
+    m_free(new->data);
+    return current->data;
+  }
+}
+
+void print_list()
+{
+  meta *current=base;
+
+  while(current)
+  {
+    printf("%d %d ",current->free,current->size);
+    if(!current->free)
+      printf("%s\n",current->data);
+    else
+      printf("\n");
+    current=current->next;
+  }
+
+}
diff --git a/alloc.h b/alloc.h
index 3245f55..f6af3e9 100644
--- a/alloc.h
+++ b/alloc.h
@@ -1,8 +1,35 @@
+#ifndef _STDINT_H_
+#define _STDINT_H_
+#include <stdint.h>
+#endif
+
+#ifndef _SYS/TYPES_H_
+#define _SYS/TYPES_H_
+#include <sys/types.h>
+#endif
+
 #ifndef _ALLOC_H_
 #define _ALLOC_H_
 
+#define FIRST 1
+#define BEST 2
+#define WORST 4
+#define METASIZE 16
+
+extern int type;
+
 typedef struct meta_struct {
+uint32_t size;
+uint32_t free;
+struct meta_struct *next;
+struct meta_struct *prev;
 
+char data[1];
 } meta;
 
+void *m_malloc(size_t size);
+void m_free(void *point);
+void *m_realloc(void* point,size_t size);
+
 #endif
+
diff --git a/input.txt b/input.txt
new file mode 100644
index 0000000..ec819f3
--- /dev/null
+++ b/input.txt
@@ -0,0 +1,4 @@
+3 F
+s Think like a man of action and act like man of thought.
+s Courage is very important. Like a muscle, it is strengthened by use.
+s Life is the art of drawing sufficient conclusions from insufficient premises.
diff --git a/input2.txt b/input2.txt
new file mode 100644
index 0000000..ade2e22
--- /dev/null
+++ b/input2.txt
@@ -0,0 +1,3 @@
+2 F
+m Think like a man of action and act like man of thought
+f 0
diff --git a/main b/main
new file mode 100755
index 0000000000000000000000000000000000000000..a8a6e8028784e210abe492a407bd71959de8368e
GIT binary patch
literal 21828
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

literal 0
HcmV?d00001

diff --git a/main.c b/main.c
index b5fba06..0fc6174 100644
--- a/main.c
+++ b/main.c
@@ -1,6 +1,79 @@
+#include <stdio.h>
+#include <string.h>
 #include "alloc.h"
 
-int main()
+extern int type;
+
+int main(int argc,char *argv[])
 {
+
+  if(argc!=2){
+    printf("err\n");
+    printf("run with input.txt\n");
+    return 1;
+  }
+
+  FILE *input;
+  if((input=fopen(argv[1],"r"))==NULL){
+    printf("err open input file\n");
+    return 1;
+  }
+  char buf[4096];
+  char *tok;
+  int i=0;
+
+  fgets(buf,sizeof(buf),input);
+  tok=strtok(buf," ");
+  int line;
+  if((line=atoi(tok))==0){
+    printf("Format Err\n");
+    return 1;
+  }
+  tok=strtok(NULL," ");
+  switch(tok[0]){
+    case 'F'://first fit
+      type=FIRST;
+      break;
+    case 'B'://best fit
+      type=BEST;
+      break;
+    case 'W'://worst fit
+      type=WORST;
+      break;
+    default://err
+      printf("wrong format\n");
+      exit(1);
+  }
+ 
+  char **list=(char**)malloc(sizeof(char*)*line);
+  int j=0,after_size,tmp;
+  for(i=0;i<line;i++){
+    memset(buf,'\0',sizeof(buf));
+    fgets(buf,sizeof(buf),input);
+    buf[strlen(buf)-1]='\0';
+    switch(buf[0]){
+      case 'm':
+      case 's':
+        list[j]=m_malloc(strlen(buf+2)+1);
+        strcpy(list[j++],buf+2);
+	break;
+      case 'f':
+        tmp=atoi(buf+2);
+        m_free(list[tmp]); 
+        break;
+      case 'r':
+        tok=strtok(buf+2," ");
+        tmp=atoi(tok);
+        tok=strtok(NULL," ");
+        after_size=atoi(tok);
+        m_realloc(list[tmp],after_size);
+        break;
+      case 'e':
+        tmp=atoi(buf+2);
+        list[j++]=m_malloc(tmp);
+        break;
+    }
+  }
+  print_list();
   return 0;
 }
-- 
GitLab