Boehm-Speicherbereinigung
| Skriptfehler: Ein solches Modul „WLink“ ist nicht vorhanden.
| |
|---|---|
| [[Datei:Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden.|150px]] | |
| Basisdaten
| |
| Maintainer | Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden. |
| Entwickler | Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden. |
| Erscheinungsjahr | Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden. |
| Aktuelle Version | Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden. (Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden.) |
| Aktuelle Vorabversion | Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden. (Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden.) |
| Betriebssystem | Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden. |
| Programmiersprache | C, C++ |
| Kategorie | Garbage Collection |
| Lizenz | ähnlich MIT-Lizenz |
| www.hboehm.info/gc | |
Die Boehm-Speicherbereinigung ist eine freie Programmbibliothek zur konservativen Garbage Collection für die Programmiersprachen C und C++.
Details[Bearbeiten]
Konservative Speicherbereinigungen werden von vielen C- oder C++-Programmen und bei einer Reihe von Laufzeitumgebungen für andere Sprachen wie dem GNU Compiler for Java (GCJ), Portable.NET, LLVM, dem GNU D Compiler und Mono (bis Version 2.5) verwendet.
Die Referenzimplementierung unterstützt zahlreiche Betriebssysteme einschließlich vieler Unix-ähnliche (Linux, Mac OS X, …) und Windows und bietet eine Reihe fortschrittlicher Merkmale wie inkrementelle und parallele Bereinigung und eine Reihe von verschiedenartigen Finalisierungen. Sie wurde mit geringen Änderungen für die Programmiersprache D portiert und ist Teil der Standardlaufzeitbibliothek Phobos des Digital-Mars-D-Compilers. Sie schließt auch eine C-Bibliothek zum Umgang mit Zeichenketten namens cords ein. Die Implementierung unterliegt einer Freie-Software-Lizenz ähnlich der MIT-Lizenz.
Die Speicherbereinigung kann auch in einem Test-Modus eingesetzt werden, in der die Deallokation des Speichers manuell bleibt und dabei überprüft wird, ob sie korrekt funktioniert, um so Speicherlecks und doppelte Deallokationen zu erkennen.
Beispiel[Bearbeiten]
Das Verfahren funktioniert mit den meisten unveränderten C-Programmen, indem einfach jeweils der Aufruf von malloc() durch GC_malloc() und realloc() durch GC_realloc() ersetzt wird sowie free()-Aufrufe entfernt werden. Untenstehender Codeabschnitt zeigt die Verwendung des Boehm-Verfahrens anstatt des herkömmlichen malloc() und free() in C.<ref>Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Hans-J. Boehm ehemals im Vorlage:Referrer (nicht mehr online verfügbar)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> Die Speicherbereinigung basiert dabei auf einer Analyse des Stapels, bei der die lebenden Objektverweise identifiziert werden. Das ist nicht durch portierbaren C-Code möglich, sondern erfordert für jede Systemplattform spezielle Anpassungen.<ref>Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Hans-J. Boehm ehemals im Vorlage:Referrer (nicht mehr online verfügbar)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> <syntaxhighlight lang="cpp">
- include <assert.h>
- include <stdio.h>
- include <gc.h>
int main(void) {
int i;
GC_INIT();
for (i = 0; i < 10000000; ++i)
{
int **p = (int**)GC_MALLOC(sizeof(int *));
int *q = (int*)GC_MALLOC_ATOMIC(sizeof(int));
assert(*p == 0);
*p = (int*)GC_REALLOC(q, 2 * sizeof(int));
if (i % 100000 == 0)
printf("Heap size = %d\n", GC_get_heap_size());
}
return 0;
} </syntaxhighlight>
Weblinks[Bearbeiten]
- Homepage
- GitHub-Projektseite
- Hans-J. Boehm, Michael Spertus: Transparent Programmer-Directed Garbage Collection for C++. (PDF; 156 kB)
Einzelnachweise[Bearbeiten]
<references />