Wie erkennt man im Speicher Pointer?



  • Konservative Garbage Collectoren suchen AFAIK den Speicher nach Bitmustern ab, die Pointer auf Objekte sein könnten und nehmen dann an, dass es sich um ein referenziertes Objekt handelt.
    Dies hat zur Folge, dass evtl. ein paar Objekte nicht bereinigt werden, weil irgendwelche Variablen zufällig das gleiche Bitmuster haben wie ein gültiger Pointer.

    Es gibt aber auch Collectoren, die mit Sicherheit alle nicht referenzierten Objekte erkennen. Wie erkennen die Pointer, so dass sie nicht was falsches versehentlich auch als Pointer erkennen?



  • Optimizer schrieb:

    Es gibt aber auch Collectoren, die mit Sicherheit alle nicht referenzierten Objekte erkennen. Wie erkennen die Pointer, so dass sie nicht was falsches versehentlich auch als Pointer erkennen?

    Die kennen den Typ und das Layout aller Objekte, so dass sie wissen, welche Felder wieder Pointer sind. Das geht logischerweise nur bei einer kooperativen Sprache, nicht in C oder so.



  • Und auf dem Stack? Woher wissen die, dass etwas ein int und kein Pointer ist?



  • Indem sich alles, was referenziert ist, vom Stack aus zurückverfolgen lässt? Nur so ne Idee.

    *edit* ist als Antwort auf den ersten Post gedacht, hab folgendes erst nacher gelesen /edit



  • Optimizer schrieb:

    Und auf dem Stack? Woher wissen die, dass etwas ein int und kein Pointer ist?

    Sie kennen natürlich auch das Layout der einzelnen Activation Records.



  • Wenn du jetzt "Stack Frame" gesagt hättest, dann hättest du mir 10sec googlen erspart.
    Ok, das macht Sinn, danke. 🙂


Anmelden zum Antworten