Heap Memory Management
-
Hi,
ich will gerne mal einen eigenen Memory Manager schreiben, einfach nur ums gemacht zu haben.
Ich habe mal kurz gegoogelt und gesehen das es einen Haufen Beispiele gibt, aber ich will lieber selber erstmal ein bischen probieren bevor ich anfange mir fertigen Code anzusehen.
Das Problem ist ja das viele kleine Speicheranforderungen langsam sind. Daher kam mir erstmal die Idee etwas zu bauen mit dem ich kleine Mengen Speicher verwalten kann so alles was kleiner 256 Byte ist.
Also ich stelle mir das in etwa so vor
void *val = malloc(2560); char *c = (char*) meineFunktion(256);
Wie bekomme ich nun die ersten 256 Byte meiner 2560 in den Charpointer??
-
char* c = (char*) val;
-
Garnicht. Wie der Name Pointer schon sagt, zeigt ein Zeiger auf Speicher und enthält keinen. Du kannst aber einfach nur die ersten 256 Bytes für char *c verwenden (halt max nen string mit der länge 255 (+ '\0' reinschreiben) und nen 2. Char Pointer dann mit char *c2 = val + 256; etc .. wofür das auch immer gut sein soll.
-
feigling schrieb:
Garnicht. Wie der Name Pointer schon sagt, zeigt ein Zeiger auf Speicher und enthält keinen. Du kannst aber einfach nur die ersten 256 Bytes für char *c verwenden (halt max nen string mit der länge 255 (+ '\0' reinschreiben) und nen 2. Char Pointer dann mit char *c2 = val + 256; etc .. wofür das auch immer gut sein soll.
Ja genau das will ich.
Ich wusste nicht wie ich das tippen muss.Naja char war nur ein Beispiel, von mir aus können das auch structs sein. Der Plan ist einfach ein vielfaches vom benötigten Platz zu reservieren und diesen dann selbst zuzuteilen.
Ich will einfach mal sehen wieviel schneller oder langsamer das geht, wobei ein
for (int i = 0; i<10000; i++) { char *c = malloc(80); }
auf meinem Rechner fast Faktor 20 langsamer ist als
char *c = malloc(800000);
Wenn nach ein bischen Verwaltung vielleicht ein Faktor von 15 oder 10 übrigbleibt, dann wäre das schonmal was.
-
Ein Faktor von 5 ist da noch drin, mit dem progginmania PLUSFAKTOR_5 Makro