Ou cette méthode indique-t-elle simplement un entier unique que possède chaque objet?La méthode object_id de ruby fait-elle référence à l'emplacement de la mémoire?
Répondre
Eh bien, cela dépend de ce que vous voulez dire par "ruby";) En jruby c'est juste un entier unique autant que je peux dire.
De même, des choses comme les nombres ne sont pas l'emplacement de la mémoire. J'oublie tous les détails et je suis sûr que quelqu'un te les donnera.
irb(main):020:0> 1.object_id
=> 3
irb(main):021:0> (2-1).object_id
=> 3
En rubis «normal» (IRM 1.8.x et 1.9.x) c'est juste une valeur unique.
Ceci est également le cas dans IronRuby
Il est une combinaison de nombreux paramètres, la valeur, le type d'objet, dans la mémoire. Plus peut être lu here
Ce n'est pas une référence directe à l'emplacement de la mémoire et le "codage" est spécifique à une implémentation Ruby particulière. Si vous pouvez lire le code C, vous trouverez peut-être instructif de regarder les méthodes rb_obj_id
et id2ref
dans gc.c
dans la source Ruby 1.8.6. Vous pouvez également en savoir plus sur le "codage" dans la section "Objets incorporés dans VALUE" de la traduction partielle du Ruby Hacking Guide chapter 2.
[Lien vers la source de l'IRM.] (http: // rxr. whitequark.org/mri/source/gc.c#3158) –
Il convient de noter que vous pouvez effectuer une recherche inversée d'ID d'objet à l'aide:
ObjectSpace._id2ref(object_id)
Par exemple:
ObjectSpace._id2ref(0) #=> false
ObjectSpace._id2ref(1) #=> 0
ObjectSpace._id2ref(2) #=> true
ObjectSpace._id2ref(3) #=> 1
ObjectSpace._id2ref(4) #=> nil
- 1. Pourquoi la méthode Contain de ArrayCollection de Flex examine-t-elle la référence de la mémoire?
- 2. Gestion de la mémoire. Copier méthode
- 3. Accès à la méthode dans Ruby
- 4. Ruby - l'équivalent de la méthode Python __str __()?
- 5. Équivalent à la méthode findall() de Python dans Ruby?
- 6. Évitez l'objet object_id lorsque vous utilisez andand dans Ruby 1.9?
- 7. ORO (Une référence uniquement) Gestion de la mémoire
- 8. macruby: Utilisation de la méthode ruby comme AXObserverCallback
- 9. Erreur de référence non définie pour la méthode de gabarit
- 10. Quel algorithme utilise la méthode de tri de Ruby?
- 11. Est-il possible d'obtenir la méthode de référence dans VB.NET?
- 12. Déchargement de la mémoire
- 13. C#, XmlDoc: Comment la méthode de référence surcharges
- 14. object_id() vs sys.objects
- 15. Méthode multiplate-forme pour l'utilisation du processeur/de la mémoire
- 16. Redéfinir la méthode File :: dirname ruby
- 17. Comment détecter la fin d'une chaîne de méthode dans Ruby
- 18. appels Ruby méthode déclarée dans le corps de la classe
- 19. Ruby méthode, Proc, et la confusion de bloc
- 20. Comment déterminer un Dynamiquement Nom de la méthode en Ruby
- 21. gestion de la mémoire iphone
- 22. Vue de la mémoire allouée
- 23. Enregistrement de la référence à UITableViewCell
- 24. Pointeurs de méthode dans Ruby
- 25. Utilisation de la mémoire
- 26. Ruby on rails: problème de mémoire create_fixtures
- 27. Objective-C: Correction de la gestion de la mémoire dans une méthode
- 28. AS3: Optimisation de la taille de la mémoire de l'objet
- 29. aliaser une méthode aboutit à différents objets?
- 30. Débogage de la mémoire de l'iPhone
Fixnum sont stockés dans le bit object_id déplacé vers la gauche et la jeu de bits le moins significatif, voir http://stackoverflow.com/questions/2402228/accessing-objects-memory-address-in-ruby/2402440#2402440 Votre '(2-1)' n'a pas de sens, essayez à la place '' (4711 >> 1) .object_id' –