Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: Δημιουργία dangling pointer στην stack και στην heap.

Δημιουργία dangling pointer στην stack και στην heap. 11 Χρόνια 6 Μήνες πριν #1736

  • NGeo
  • Το Άβαταρ του/της NGeo
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 11
Καλησπέρα Είναι δυνατόν να έχουμε dangling pointer στην python?? Αν ναι πως γίνεται? Κάποιο μικρό παραδειγματάκι θα βοήθαγε. Thanks! :woohoo:
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Απ: Δημιουργία dangling pointer στην stack και στην heap. 11 Χρόνια 6 Μήνες πριν #1738

  • NGeo
  • Το Άβαταρ του/της NGeo
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 11
Βρήκα αυτο το παράδειγμα αλλα δεν καταλαβα τι ακριβως γινεται. Πιο είναι το dangling reference εδω? Από Weak reference doc
import weakref
class Object:
    pass
 
o = Object()    #new instance
print ("o id is:",id(o))
r = weakref.ref(o)
print ("r id is:",id(r))
o2 = r()
print ("o2 id is:",id(o2))
print ("r() id is:",id(r()))
print (o is o2)         
 
del o,o2
print (r(),r)   #If the referent no longer exists, calling the reference object returns None
 
o = r()         # r is a weak reference object
if o is None:
    # referent has been garbage collected
    print ("Object has been deallocated; can't frobnicate.")
else:
    print ("Object is still live!")
    o.do_something_useful()
Τελευταία διόρθωση: 11 Χρόνια 6 Μήνες πριν από NGeo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Απ: Δημιουργία dangling pointer στην stack και στην heap. 11 Χρόνια 6 Μήνες πριν #1739

  • NGeo
  • Το Άβαταρ του/της NGeo
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 11
Από default η python δεν επιτρέπει να δημιουργούνται αιωρούμενοι pointers σε objects ή names. Κάθε φορά που δημιουργούμε object έχουμε strong reference και ο reference counter μετράει τις αναφορές που υπάρχουν στο συγκεκριμένο object. Έτσι, αναπόφευκτα, δεν γίνεται να διαγράψουμε ένα object χωρίς να μηδενιστεί πρώτα ο reference counter (ή να μην ανήκει σε κλειστό κύκλο από objects που δεν είναι referenced από κάτι) και συνεπώς να γίνει unlinked το name reference με το object αυτόματα. Για να μπορέσουμε να έχουμε dangling references πρέπει να δημιουργήσουμε weak reference μεταξύ του name και του object. Το statement weakref δεν αυξάνει το reference count. Έτσι μπορούμε να έχουμε ένα reference το οποίο θα συνεχίσει να δείχνει στη θέση του object παρόλο που θα έχει γίνει collected από τον Garbage Collector.
Αν έκανα λάθος σε κάτι παρακαλώ να με διορθώσετε.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.477 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου