Code: Alles auswählen
#include <stdio.h>
#define RAM_SIZE 1024*1024
#define SEG_SIZE 1024
#define SEG_END 1024
#define RAM_START 0
int used_ram = 0;
struct free_list {
struct free_list *next;
int seg_start;
int seg_len;
}
struct free_list *free_head = NULL;
int init_free_list () {
if (free_head == NULL) {
if((free_head = (struct free_head *) malloc (sizeof (struct free_head))) == NULL) {
fprintf (stderr, "Kein Speicherplatz");
exit (1);
}
}
free_head->next = NULL;
free_head->seg_start = 0;
free_head->seg_end = SEG_SIZE-1;
used_ram = RAM_SIZE - SEG_SIZE;
return free_head->seg_start;
}
int alloc_mem () {
free_list *ptr;
free_list *ptr2;
for (ptr = free_head; ptr->next != NULL; ptr = ptr->next);
if((ptr->next = (struct free_list *)malloc (sizeof (struct free_list))) == NULL) {
fprintf (stderr, "Fehler");
exit (1);
}
ptr->seg_size = SEG_SIZE;
ptr->next = NULL;
for (ptr2 = free_head; ptr2->next != NULL; ptr2 = ptr2->next) {
if ((ptr2->next->seg_start - ptr2->seg_start) >= SEG_SIZE*2)
break;
}
if (ptr2->next == NULL) {
ptr2->next = ptr;
ptr->seg_start = ptr2->seg_start + SEG_SIZE;
return seg_start;
}
else {
ptr->next = ptr2->next;
ptr2->next = ptr;
ptr->seg_start = ptr2->seg_start + SEG_SIZE;
}
}
int main (void) {
}