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