-1

Ich versuche, eine init_allocator() Funktion zu implementieren, die den Speicherzuordner initialisiert und einen Teil der _length Bytes zur Verfügung stellt. Der Zuordner verwendet eine _basic_block_size als minimale Zuordnungseinheit. Die Funktion gibt die dem Zuordner zur Verfügung gestellte Speichermenge zurück. Wenn ein Fehler aufgetreten ist, wird 0 zurückgegeben.Speicherzuordner initialisieren in C

Dies ist, was ich bisher:

int memAvail; // amount of memory to be made available to allocator 

unsigned int init_allocator(unsigned int _basic_block_size, unsigned int _length){ 
    if (_basic_block_size < _ length){ 
     memAvail = _length/_basic_block_size; 
     return memAvail; 
    } 
    else{   
     return 0; 
    } 
} 

Ich weiß nicht, ob dies die richtige Umsetzung ist, aber es scheint mir recht. Gibt es etwas, was ich falsch mache? Soll ich Zeiger benutzen? Jeder Rat würde geschätzt werden.

+2

Ihre Anforderungen sind unklar, aber die meisten Speicherunterzuordner machen ein bisschen mehr. Sie sollten beispielsweise Ihre OS-API für die Verwaltung eines großen Speicherblocks aufrufen. –

+0

Ich sollte einen trivialen Speicherzuordner implementieren. Ich bin mir nicht sicher, was OS AP1 bedeutet – carl123

Antwort

2

Dies ist ein Beispiel Speicherzuordner von Kapitel 5.4 in Kernighan and Ritchie

#include<stdio.h> 

#define ALLOCSIZE 10000 

static char allocbuf[ALLOCSIZE]; 
static char *allocp=allocbuf; 

/* Return pointer to n characters */ 
char *alloc(int n) 
{ 
    if(allocbuf+ALLOCSIZE-allocp>=n){ 
     // It fits 
     allocp+=n; 
     return allocp-n; 
    }else 
     // Not enough room 
     return 0; 
} 

allocbuf ist der Pufferspeicher, wo Sie Ihre Zeichen speichern, da dies ein Zeichen Allocator ist. *alloccp ist ein Zeiger auf die nächste freie Position, anfangs das erste (d. H. 0) Element von allocbuf. *alloc gibt einen Zeiger auf den ersten Punkt in allocbuf zurück, in dem das Programm die n Zeichen speichert.

Dies kann leicht in andere Datentypen konvertiert werden, es zeigt ein Prinzip des möglichen einfachen Zuweiserdesigns. Klären Sie Ihre Anforderungen und ich kann Inhalte hinzufügen.

+0

Das ist anscheinend eine Hausaufgabenfrage. Sie helfen OP nicht wirklich, indem Sie einen anderen, nicht verwandten Code zeigen. – Olaf

+0

@Olaf: Es ist nicht so unterschiedlich und nicht verwandt - es zeigt einen grundlegenden Speicherzuordner, der dann geändert und erweitert werden kann. Der OP erklärte seine Bedürfnisse nicht so gut - ich ermutigte ihn dazu. Er fragte auch, ob er Hinweise für die Aufgabe braucht und das zeigt genau das. Ich würde ein einfaches Anwendungsbeispiel hinzufügen, aber ich dachte, ich warte auf das Feedback. Ich kann auch das OP-Problem lösen, aber ich war mir nicht sicher, ob das konstruktiv ist. Wenn Sie nicht zustimmen, werde ich diese Antwort erweitern. – atru

+1

Lesen Sie [fragen]. Wenn die Frage nicht den Regeln entspricht, müssen Sie sie in einem Kommentar erläutern. Wenn nichts folgt, antworte einfach nicht. Wir sind kein Coding- oder Debugging-Service. Solche Antworten fördern nur schlechte Fragen von faulen Studenten, die jemanden suchen, der ihre Hausaufgaben macht. Design und Debugging/Testing sind ein wichtiger Teil der Programmierung! Tatsächlich brauchen sie viel mehr Zeit als den Code zu schreiben. – Olaf