Boehm garbage collector (tsz. Boehm garbage collectors)
A Boehm GC lehetővé teszi a memóriakezelés automatizálását még olyan nyelvekben is, amelyek eredetileg manuális memóriakezelést igényelnek (C, C++).
A Boehm GC konzervatív:
👉 Nem tudja 100%-ig pontosan, hogy egy memóriaterület valódi pointer-e vagy csak egy véletlen szám, ami úgy néz ki, mint egy pointer.
Ezért feltételezi, hogy egy bizonyos mintázatú érték pointer lehet → ha igen, megőrzi a rámutatott objektumot.
A Boehm GC-t C/C++ kódba nagyon könnyű integrálni:
1️⃣ Letöltöd a libgc könyvtárat → https://www.hboehm.info/gc/ 2️⃣ Programodban így használhatod:
#include <gc.h>
int main() {
GC_INIT(); // GC inicializálása
int* arr = (int*) GC_MALLOC(sizeof(int) * 100);
arr = 42;
// Nem kell free() → GC automatikusan felszabadítja
return 0;
}
GC_MALLOC() → automatikusan GC által figyelt memóriaterületet foglal.
GC_INIT() → inicializálja a GC-t.
Nincs free()
→ a GC időnként lefut és takarít.
Hasonló a Java, C# GC-hez, de:
✅ Könnyen integrálható C/C++-ba → meglévő kódhoz is.
✅ Általános célú → nem kell új nyelvet tanulni.
✅ Nem igényel speciális fordítót → nem kell a fordítónak GC-információt generálnia.
✅ Non-moving → az objektumok címe stabil marad → C/C++ könyvtárakkal 100%-ban kompatibilis.
✅ Megoldja a memory leak problémát → nem kell free()
.
❌ Nem garantált, hogy minden “garbage” azonnal eltűnik → konzervatív.
❌ Nincs generációs optimalizáció → fiatal objektumok eltakarítása lassabb lehet.
❌ Stop-the-world pause → bizonyos esetekben megállíthatja rövid időre a programot.
❌ Magasabb memóriafogyasztás lehet → mivel óvatosan bánik a “potenciális” pointerekkel.
✅ Régi C/C++ kód modernizálása → memory leak minimalizálása.
✅ Interaktív programok → GUI, játékok, web szerverek.
✅ Interpreterek, VM-ek → Scheme, Lisp, Smalltalk implementációkban is népszerű.
✅ Gyors prototípus készítés C/C++-ban → nem kell free()
-t írni.
#include <gc/gc_cpp.h> // C++ wrapper
class MyObject : public gc {
public:
int x;
MyObject(int val) : x(val) {}
};
int main() {
MyObject* obj = new MyObject(42);
// Nem kell delete obj;
// Boehm GC automatikusan takarít
return 0;
}
Tulajdonság | Érték |
---|---|
Algoritmus típusa | Conservative Mark & Sweep |
Moving? | Nem |
Generációs GC? | Nem |
Inkrementális? | Igen (opcionális) |
Nyelvek | C, C++, egyéb (pl. Lisp implementációk) |
Stabilitás | Nagyon stabil (széles körben használt) |
Könnyű integrálni? | Igen |
✅ Ha C/C++-ban dolgozol és nem akarsz kézzel malloc/free
-t kezelni. ✅ Ha régi C/C++ kódba biztonságos memóriakezelést akarsz beépíteni. ✅ Ha interaktív alkalmazást írsz (játék, GUI) és fontos, hogy a program hosszabb távon is stabil maradjon. ✅ Ha gyors prototípust akarsz írni C/C++-ban.
A Boehm-Demers-Weiser GC máig az egyik legnépszerűbb általános célú, konzervatív garbage collector C/C++ programokhoz.
Előnye:
Hátránya: