Boehm-Speicherbereinigung

Boehm-Speicherbereinigung
Boehm-Speicherbereinigung
Programmier­sprache C, C++
Kategorie automatische Speicherbereinigung
Lizenz ähnlich X11-Lizenz
www.hpl.hp.com/personal/Hans_Boehm/gc

Die automatische Speicherbereinigung nach Hans Boehm, Alan Demers und Mark Weiser ist ein Verfahren der konservativen automatische Speicherbereinigung für die Programmiersprachen C und C++, das 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 wird.

Die Referenzimplementation 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 Finalisierungssemantiken. Sie wurde mit geringen Änderungen für die Programmiersprache D portiert und ist Teil der Standardlaufzeitbibliothek Phobos des Digital-Mars-D-Compilers. Sie kommt auch mit einer C-Bibliothek zum Umgang mit Zeichenketten namens cords. Die Implementierung unterliegt einer Freie-Software-Lizenz ähnlich der X11-Lizenz.

Das Verfahren kann auch in einem Test-Modus eingesetzt werden, in dem es die Speicherbereinigung dem Programmierer überlässt und dabei überprüft, ob sie korrekt funktioniert, um so Speicherlecks und doppelte Deallokationen zu erkennen.

Beispiel

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.[1]

#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;
}

Weblinks

Quellen

  1. Using the Garbage Collector: A simple example

Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • CACAO — Entwickler TU Wien Aktuelle Version 0.99.4 (16. März 2009) Programmier­sprache C, Java Lizenz GPL (Freie Software) …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”