2011-01-11 15 views
9

Ich brauche eine generische Malloc-Implementierung, die einen großen Puffer fester Größe verwendet. Ähnliches hat die "Zero-malloc memory allocator" SQLite. Kennen Sie solche Implementierungen? Es sollte leicht und tragbar sein, das für eingebettete Anwendungen verwendet werden kann.malloc Implementierung aus fester Größe Puffer

Vielen Dank im Voraus.

+0

Was ist los mit Ihrem malloc? – mathk

+0

@Mathk: Speicherfragmentierung (oder nicht). Möchten Sie vorab wissen, wie viel Speicherkern dem Prozess zugewiesen wird. – Manish

Antwort

6

Zwei Vorschläge:

  1. IF Sie etwas Produktionsqualität und gut getestet benötigen, leihen nur allocator die SQLite. Der Quellcode von SQLite ist sehr gut geschrieben, dokumentiert, extrem gut getestet und hat eine Open-Source-Lizenz, die sehr freizügig ist.
  2. IF Sie brauchen etwas kleines und einfaches, entweder zu lernen oder in einer eingebetteten Umgebung zu verwenden, betrachten this implementation [schamlosen Stecker!] - nur 350 LOC von kommentierten C-Code.
+0

Ich stimme einigen Kommentatoren auf dem Post zu, mit dem Sie verlinkt sind - diese Art von Allokator löst das Robustheitsproblem für eingebettete Systeme (katastrophale Fragmentierung) nicht. Das OP sollte die Anforderungen besser formulieren und überlegen, ob das, wonach er gefragt hat, das Problem wirklich lösen kann. –

+0

@R: Das Fehlen von Fragmentierung war nicht das Ziel dieses Zuordners, sondern vielmehr die zuverlässige Berechnung des gesamten Heapspeichers, der von eingebetteten Anwendungen benötigt wird. –

+1

Danke. Ich suchte nach einer einfachen Implementierung zu Testzwecken. Ich sehe, dass Realloc nicht implementiert ist. Ich plante, es große Codebasis zu verwenden, die reallocs auch verwendet hat. Ich denke, es ist am besten, SQLite-Implementierung zu portieren, wie Sie und andere vorgeschlagen haben. Ich habe das nicht getan, da ich erwartet hatte, dass jemand anderes es getan hätte UND auch, weil ich faul bin :) – Manish

4

Der SQLite-Quellcode ist frei verfügbar. Wenn Sie eine bestimmte Implementierung mögen, warum nicht verwenden?

1

Die meisten aktuellen Implementierungen von malloc arbeiten, indem sie einen großen Teil des Speichers, den sie vom Betriebssystem erhalten haben, zerlegen. Wenn dieser Block leer ist, fragt malloc das Betriebssystem nach einem neuen großen Block.

Sie könnten Ihre eigene Implementierung auf einer vorhandenen malloc Implementierung aufbauen (zum Beispiel glibc), und anstatt einen Block vom Betriebssystem zu erhalten, verwenden Sie einen einzelnen statischen Puffer. Wenn diese Zeit abgelaufen ist, beginnt malloc mit einem Fehler, genau wie wenn das Betriebssystem keine neuen Blöcke bereitstellen kann.

Verwandte Themen