Ruby Memory Validator में सक्षम होना चाहिए इसे खींचने के लिए लेकिन यह मुफ़्त नहीं है।
अमन गुप्ता
patched जो दमाटोस
memprof लेकिन यह
work in progress लगता है और मुझे इसे कभी भी मेरी मशीन पर चलाने के लिए नहीं मिला। जो के
blog पर memprof और अन्य निम्न स्तर की सामग्री के बारे में वास्तव में अच्छी पोस्ट हैं।
अब मुझे यकीन नहीं है कि वे वास्तव में कर सकते हैं। इंटीग्रर्स को Fixnum
और Fixnum
के रूप में संग्रहीत किया जाता है, सामान्य रूबी ऑब्जेक्ट नहीं होता है, यह बस उस तरह दिखता है। Fixnum
वस्तुओं को immidiate मान बनाने के लिए रूबी object_id
के साथ एक चालाक गति अप चाल का उपयोग करता है। वास्तव में यह संख्या object_id
में संग्रहीत है। यही कारण है कि एक ही मूल्य वाले दो अलग-अलग फ़िक्सम में object_id
समान है।
>> x=5
=> 5
>> y=5
=> 5
>> x.object_id
=> 11
>> y.object_id
=> 11
>> z=4711
=> 4711
>> z.object_id
=> 9423
एक Fixnum
की object_id
वास्तव में थोड़ा बाईं ओर स्थानांतरण और फिर कम से कम महत्वपूर्ण बिट की स्थापना द्वारा बनाई गई है।
5
0b101
है और 5
के लिए object_id
11
और 11
बाइनरी में 0b1011
है।
4711
0b0001001001100111
है, छोड़ दिया शिफ्ट और बिट सेट और आप 0b0010010011001111
हो और कि 9423 जो ऊपर z
के लिए object_id
होने वाला है।
This behaviour सबसे अधिक कार्यान्वयन विशिष्ट है लेकिन मुझे रूबी कार्यान्वयन के बारे में पता नहीं है जो इस तरह फिक्सम को संभाल नहीं पाता है।
रूबी में कम से कम तीन और तत्काल वस्तुओं रहे हैं और कहा कि false
, true
और nil
है।
>> false.object_id
=> 0
>> true.object_id
=> 2
>> nil.object_id
=> 4
स्रोत
2010-03-08 15:37:24
क्यों? तुम क्या करने की कोशिश कर रहे हो? – SLaks