2009-09-17 13 views
5

Psyco पायथन के लिए एक विशेष संकलक है। documentation statesसाइको बहुत मेमोरी का उपयोग क्यों करता है?

साइको बड़ी मात्रा में स्मृति का उपयोग और उपयोग करेगा।

इस स्मृति उपयोग के मुख्य कारण क्या हैं? सामान्य रूप से जेआईटी कंपाइलरों की एक विशेषता है जो पर्याप्त मेमोरी ओवरहेड है?

संपादित करें: अभी तक उत्तर के लिए धन्यवाद। तीन संभावित दावेदार हैं।

  • कई विशेष ब्लॉक लेखन, जिनमें से प्रत्येक स्मृति
  • ओवरहेड की आवश्यकता के कारण गतिशील रूपरेखा

सवाल यह है कि ऐसा करने के लिए पर्याप्त डेटा पर कब्जा करने के कारण मक्खी

  • ओवरहेड पर स्रोत संकलन करने के लिए, स्मृति उपयोग में प्रभावशाली कारक कौन सा है? मेरी अपनी राय है। लेकिन मैं एक बक्षीस जोड़ रहा हूं, क्योंकि मैं उस जवाब को स्वीकार करना चाहता हूं जो वास्तव में सही है! यदि कोई भी दिखा सकता है या साबित कर सकता है कि अधिकांश मेमोरी का उपयोग किया जाता है, तो मैं इसे स्वीकार करूंगा। अन्यथा जो भी समुदाय वोट देता है वह बक्षीस के अंत में स्वतः स्वीकार किया जाएगा।

  • उत्तर

    2

    साइको का स्मृति ओवरहेड वर्तमान में बड़ा है। मुझे थोड़ी देर के साथ कम कर दिया गया है, लेकिन यह अभी भी एक उपर है। यह ओवरहेड पायथन कोड की मात्रा के समान है जो साइको को फिर से लिखता है; इस प्रकार यदि आपके एप्लिकेशन में कुछ एल्गोरिदमिक "कोर" फ़ंक्शन हैं, तो ये वे हैं जिन्हें आप साइको को तेज करना चाहते हैं --- पूरे कार्यक्रम में नहीं।

    तो मुझे लगता है कि बड़ी मेमोरी आवश्यकताएं इस तथ्य के कारण हैं कि यह स्मृति में स्रोत लोड कर रहा है और फिर इसे संकलित करता है। जितना अधिक स्रोत आप कोशिश करेंगे और उतना ही संकलित करेंगे जितना इसकी आवश्यकता होगी। मुझे लगता है कि अगर यह इसके शीर्ष पर ऑप्टोमाइज़ करने का प्रयास कर रहा है, तो यह सर्वोत्तम मामले की कोशिश करने और पहचानने के लिए कई संभावित समाधान देखेंगे।

    10

    psyco वेबसाइट से "JIT संकलक करने के लिए परंपरागत दृष्टिकोण के साथ अंतर यह है कि Psyco लिखते ही ब्लॉक की कई संस्करण है, जिनमें से कुछ प्रकार के विशेष जा रहा द्वारा अनुकूलित कर रहे हैं (एक ब्लॉक में एक समारोह का एक सा है) चर (एक "प्रकार" एक प्रकार हो सकता है, लेकिन यह अधिक सामान्य है) "

    5

    " Psyco वास्तविक रन-टाइम डेटा है कि अपने कार्यक्रम मशीन कोड के संभावित कई संस्करण लिखने के लिए manipulates, प्रत्येक अलग ढंग से विशेष का उपयोग करता है विभिन्न प्रकार के डेटा के लिए। " http://psyco.sourceforge.net/introduction.html

    कई JIT compilers स्थिर टाइप किया भाषाओं के साथ काम करते हैं, तो वे जानते हैं कि प्रकार तो सिर्फ नाम से जाना जाता प्रकार के लिए मशीन कोड बना सकते हैं। बेहतर लोग डायनामिक प्रोफाइलिंग करते हैं यदि प्रकार पॉलीमोर्फिक हैं और अधिक सामान्य रूप से सामने वाले पथ अनुकूलित करते हैं; यह आमतौर पर गतिशील प्रकार और डैगर की भाषाओं वाली भाषाओं के साथ भी किया जाता है; साइको अपने दांवों को संभालने के लिए प्रतीत होता है ताकि यह तय करने के लिए एक पूर्ण कार्यक्रम विश्लेषण करने से बचें कि किस प्रकार के प्रकार हो सकते हैं, या यह जानने के लिए प्रोफाइलिंग कि किस प्रकार के उपयोग हैं।

    और डैगर; मैं कभी भी पाइथन में पर्याप्त गहराई से नहीं गया हूं कि यह काम करता है या नहीं कि गतिशील प्रकार हैं या नहीं (किस प्रकार की संरचना रनटाइम पर उस प्रकार के साथ बनाई गई वस्तुओं के बाद बदला जा सकता है), या केवल सामान्य कार्यान्वयन केवल जांच रनटाइम पर प्रकार; अधिकांश लेख केवल पाइथन के संदर्भ में इसे परिभाषित किए बिना गतिशील टाइपिंग के बारे में बताते हैं।

    +4

    एक उचित दिखने वाले पैर-नोट को लागू करने के लिए अच्छा और उपयोग करने वाला डैगर! – unwind

    +0

    आप निश्चित रूप से फ्लाई पर कक्षा के एक तात्कालिकता के लिए सदस्यों और कार्यों को जोड़ सकते हैं। आप अनलोड कर सकते हैं, संशोधित कर सकते हैं फिर एक कक्षा वाले मॉड्यूल को पुनः लोड कर सकते हैं और नए को भी शुरू कर सकते हैं। –

    +0

    क्या वह उस वर्ग के साथ मौजूदा ऑब्जेक्ट्स को बदलता है, या रीलोड के बाद बनाए गए केवल नए हैं? –

    2

    निश्चित रूप से psyco स्मृति उपयोग संकलित असेंबलर ब्लॉक से आता है। साइको कभी-कभी कार्यों के overspecialization से पीड़ित है, जिसका मतलब है कि असेंबलर ब्लॉक के कई संस्करण हैं। साथ ही, यह भी बहुत महत्वपूर्ण है, साइको कभी भी एक बार आवंटित असेंबलर ब्लॉक को मुक्त नहीं करता है, भले ही उसके साथ संसाधित कोड मृत हो।

    यदि आप लिनक्स के तहत अपना प्रोग्राम चलाते हैं तो आप अनाम मेमोरी के बढ़ते ब्लॉक को देखने के लिए/proc/xxx/smaps देख सकते हैं, जो ढेर से अलग क्षेत्र में है। यह अनामिक रूप से एंबलर लिखने के लिए एमएमएपीड हिस्सा है, जो बिना साइको के चलते समय गायब हो जाता है।

    संबंधित मुद्दे