121{
122 void *mem;
123
124 if ((!mem_chunk->mem_area) || ((mem_chunk->mem_area->index + mem_chunk->atom_size) > mem_chunk->area_size))
125 {
126 mem_chunk->mem_area =
di_malloc (mem_chunk->rarea_size);
127
128 mem_chunk->num_mem_areas += 1;
129 mem_chunk->mem_area->next = mem_chunk->mem_areas;
130 mem_chunk->mem_area->prev = NULL;
131
132 if (mem_chunk->mem_areas)
133 mem_chunk->mem_areas->prev = mem_chunk->mem_area;
134 mem_chunk->mem_areas = mem_chunk->mem_area;
135
136 mem_chunk->mem_area->index = 0;
137 mem_chunk->mem_area->free = mem_chunk->area_size;
138 mem_chunk->mem_area->allocated = 0;
139 }
140
141 mem = &mem_chunk->mem_area->mem[mem_chunk->mem_area->index];
142 mem_chunk->mem_area->index += mem_chunk->atom_size;
143 mem_chunk->mem_area->free -= mem_chunk->atom_size;
144 mem_chunk->mem_area->allocated += 1;
145
146 return mem;
147}
void * di_malloc(size_t n_bytes) __attribute__((malloc))
Definition mem.c:29