@@ -71,10 +71,13 @@ static const size_t min_allocation = sizeof(free_list_entry_t) - sizeof(size_t);
7171
7272void * my_malloc (size_t size )
7373{
74+ #ifdef DEBUG
75+ fprintf (stderr , "my_alloc(%ld)\n" , (long int )size );
76+ #endif
7477 errno = 0 ;
7578 if (size <= 0 ) return NULL ;
7679
77- /* -----------------------------------------sizeof(free_list_entry_t) - sizeof(size_t) --------------------------------
80+ /* -------------------------------------------------------------------------
7881 * Implementation restriction - all allocation requests are to fit inside a
7982 * single chunk.
8083 * ---------------------------------------------------------------------- */
@@ -97,7 +100,10 @@ void *my_malloc(size_t size)
97100 {
98101 size += min_allocation - ((size + sizeof (size_t )) & mask );
99102 }
100- }
103+ }
104+ #ifdef DEBUG
105+ fprintf (stderr , "my_alloc: adjusted size=%ld\n" , (long int )size );
106+ #endif
101107
102108 /* -------------------------------------------------------------------------
103109 * If there is no free list yet, create a free area of one chunk only.
@@ -108,7 +114,16 @@ void *my_malloc(size_t size)
108114 free_list -> allocated = chunk_size - sizeof (size_t );
109115 free_list -> prev_free_area = NULL ;
110116 free_list -> next_free_area = NULL ;
117+ #ifdef DEBUG
118+ fprintf (stderr , "my_alloc: allocated free_list=%10p with size=0X%08lX\n" , (void * )free_list , free_list -> allocated );
119+ #endif
120+ }
121+ #ifdef DEBUG
122+ else
123+ {
124+ fprintf (stderr , "my_alloc: free_list=%10p\n" , (void * )free_list );
111125 }
126+ #endif
112127
113128 /* -------------------------------------------------------------------------
114129 * First fit allocation. (This is the simplest to implement.)
@@ -120,7 +135,13 @@ void *my_malloc(size_t size)
120135 candidate_area = candidate_area -> next_free_area )
121136 {
122137 last_free_area = candidate_area ;
138+ #ifdef DEBUG
139+ fprintf (stderr , "my_alloc: candidate_area=%10p\n with size=0X%08lX" , (void * )candidate_area , (long int )candidate_area -> allocated );
140+ #endif
123141 }
142+ #ifdef DEBUG
143+ fprintf (stderr , "my_alloc: candidate_area=%10p and last_free_area=%10p\n" , (void * )candidate_area , (void * )last_free_area );
144+ #endif
124145
125146 /* -------------------------------------------------------------------------
126147 * If there is insufficient free space available, do NOT request any new
@@ -162,7 +183,14 @@ void *my_malloc(size_t size)
162183 split_free_area -> next_free_area = candidate_area -> next_free_area ;
163184 if (last_free_area == NULL )
164185 {
165- free_list = candidate_area -> next_free_area ;
186+ if (candidate_area -> next_free_area != NULL )
187+ {
188+ free_list = candidate_area -> next_free_area ;
189+ }
190+ else
191+ {
192+ free_list = split_free_area ;
193+ }
166194 }
167195 else
168196 {
0 commit comments