free fixes, gonna do large memory zones next

This commit is contained in:
Jack Halford 2017-02-16 19:32:00 +01:00
parent 1b8b22fbdf
commit 4482024705
6 changed files with 15 additions and 9 deletions

2
malloc/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
myprogram
*.o

View file

@ -2,7 +2,7 @@
# define MALLOC_H
# define malloc_n 64
# define malloc_m 512
# define malloc_m 1024
# define malloc_N (1 * getpagesize())
# define malloc_M (2 * getpagesize())
# define malloc_magic 1234567

Binary file not shown.

View file

@ -6,11 +6,11 @@ int main(void)
printf("sizeof(long)=[%lu]\n", sizeof(long));
printf("sizeof(t_node)=[%lu]\n", sizeof(t_node));
void *ptr0 = malloc(16 * sizeof(long));
void *ptr0 = malloc(8190 * sizeof(long));
show_alloc_mem();
printf("\n");
void *ptr1 = malloc(32 * sizeof(long));
void *ptr1 = malloc(300 * sizeof(long));
show_alloc_mem();
printf("\n");
@ -22,9 +22,9 @@ int main(void)
/* show_alloc_mem(); */
/* printf("\n"); */
free(ptr0);
show_alloc_mem();
printf("\n");
/* free(ptr0); */
/* show_alloc_mem(); */
/* printf("\n"); */
free(ptr1);
show_alloc_mem();

Binary file not shown.

View file

@ -7,18 +7,22 @@ t_node *small_alloc = NULL;
t_node **find_node(t_node **node, size_t size)
{
while (*node && (size_t)(*node)->size < sizeof(t_node) + size)
while (*node && (size_t)(*node)->size < size + HEADER_SIZE)
node = &(*node)->next;
return (node);
}
void add_chunk(t_node **node_ref, size_t size)
{
size_t chunk_size;
while (*node_ref)
node_ref = &(*node_ref)->next;
*node_ref = mmap(NULL, malloc_N, PROT_READ|PROT_WRITE,
chunk_size = TINY(size) ? malloc_N : malloc_M;
printf("chunk_size=[%zu]\n", chunk_size);
*node_ref = mmap(NULL, (chunk_size +1) * 8, PROT_READ|PROT_WRITE,
MAP_ANON|MAP_PRIVATE, -1, 0);
(*node_ref)->size = TINY(size) ? malloc_N : malloc_M;
(*node_ref)->size = chunk_size;
(*node_ref)->next = NULL;
}