सी से बुलाए जाने वाले हास्केल फ़ंक्शन को निर्यात करते समय, हास्केल का कचरा कब एकत्र किया जाता है? यदि सी main
का मालिक है तो हैस्केल में अगली कॉल की भविष्यवाणी करने का कोई तरीका नहीं है। सिंगल थ्रेडेड हास्केल या समानांतर जीसी के बिना चलने पर यह सवाल विशेष रूप से प्रासंगिक है।सी से हास्केल निर्यात को कॉल करते समय कचरा कलेक्टर कब चलाता है?
उत्तर
जब आप ghc
क्रम प्रारंभ, आप RTS झंडे इसे करने के लिए argc के माध्यम से गुजरती हैं और argv like so कर सकते हैं:
RtsConfig conf = defaultRtsConfig;
conf.rts_opts_enabled = RtsOptsAll;
hs_init_ghc(&argc, &argv, conf);
यह आपको देता है set options, उदाहरण के लिए एक छोटे अधिकतम ढेर आकार को ठीक करने या एक संघनन एल्गोरिथ्म का उपयोग करने के आवंटन को कम करने के लिए नर्सरी पर। इसके अलावा, ध्यान दें कि एक निष्क्रिय जीसी है जिसका अंतराल सेट किया जा सकता है (या अक्षम), और यदि आप थ्रेडेड रनटाइम को लिंक करते हैं, तो यह चलाना चाहिए कि आप कभी भी हास्केल कॉल पर वापस आते हैं या नहीं।
संपादित: मैं वास्तव में प्रयोग नहीं किया है निम्नलिखित सत्यापित करने के लिए, लेकिन अगर हम source of hs_init_ghc को देखो हम देखते हैं कि यह संकेत संचालकों initializes, जो शामिल होना चाहिए timer handlers कि SIGVTALRM
पर जवाब देते हैं और वास्तव में यह भी शुरू होता है समय, जो कॉल करता है (POSIX पर) timer_create
जो उन संकेतों को नियमित अंतराल पर फेंक देना चाहिए। बदले में, यह समय-समय पर आरटीएस को "जागृत" करना चाहिए या नहीं, कुछ भी हो रहा है, जिसका बदले में यह मतलब होना चाहिए कि यह निष्क्रिय जीसी चलाएगा या नहीं, सिस्टम सी से हास्केल को वापस लाता है या नहीं, लेकिन फिर से, मैंने केवल पढ़ा है कोड और टिप्पणी, इसने खुद का परीक्षण नहीं किया।
आप "पुराने प्रश्नों के उत्तर" किक पर लगते हैं। कोई विशेष कारण, या आप सिर्फ मूड में हैं? – dfeuer
@ डीफ्यूअर अनिद्रा और कभी-कभी बाध्यता जो मुझे हमारे अनुत्तरित प्रश्न अनुपात को चलाने की कोशिश करने के लिए आगे निकलती है। – sclv
@ एससीएलवी मैं इस जवाब को स्वीकार करने के लिए लगभग तैयार हूं, लेकिन मेरे प्रश्न का मांस अभी भी बना हुआ है: जब जीसी वास्तव में चलती है? क्या यह सिर्फ "जब आवंटन होता है" हैस्केल पक्ष या कुछ पर? –
- 1. कचरा कलेक्टर कॉल निपटान()?
- 2. सीएमएस कचरा कलेक्टर - यह कब चलता है?
- 3. कचरा कलेक्टर सी ++
- 4. क्या सी ++ में कचरा कलेक्टर है?
- 5. कचरा कलेक्टर का उपयोग कितना समय है?
- 6. कमजोर संदर्भों का विश्लेषण करते समय कचरा कलेक्टर ब्लॉक करें
- 7. जावा कचरा कलेक्टर - यह कब एकत्र करता है?
- 8. ग्रहण: कचरा कलेक्टर बटन
- 9. Node.js 'कचरा कलेक्टर
- 10. LogManager और कचरा कलेक्टर
- 11. कंज़र्वेटिव कचरा कलेक्टर
- 12. सी ++ 11 कचरा कलेक्टर - क्यों और Hows
- 13. कब कचरा संग्रहण
- 14. पायथन: कचरा कलेक्टर का व्यवहार
- 15. NSURLSession कब चलाता है?
- 16. .NET कचरा कलेक्टर की क्षमता
- 17. जावा धागे और कचरा कलेक्टर
- 18. कचरा कलेक्टर और वृत्तीय संदर्भ
- 19. कचरा कलेक्टर को अक्षम क्यों करें?
- 20. सबस्ट्रिंग्स और गो कचरा कलेक्टर
- 21. जावा संग्रह और कचरा कलेक्टर
- 22. आप स्पष्ट रूप से अंतिम रूप से कॉल क्यों नहीं करते हैं() या कचरा कलेक्टर शुरू करते हैं?
- 23. क्या उद्देश्य-सी में आईफोन पर कचरा कलेक्टर है?
- 24. क्या एलिक्सीर के पास कचरा कलेक्टर है?
- 25. रूबी में कचरा कलेक्टर ट्यूनिंग 1.9
- 26. नेट कचरा कलेक्टर - देखें कि रनटाइम
- 27. कचरा कलेक्टर की पीढ़ियों का क्या अर्थ है?
- 28. कचरा कलेक्टर पर पाठक रूप से संशोधक प्रभाव करता है?
- 29. जावा का सीरियल कचरा कलेक्टर अन्य कचरा कलेक्टरों से कहीं बेहतर प्रदर्शन कर रहा है?
- 30. .NET कचरा कलेक्टर और x64 वर्चुअल मेमोरी
यदि आप किसी विशिष्ट विदेशी निर्यात या निर्यात के बारे में चिंतित हैं तो आप एक ['performGC'] जोड़ सकते हैं (http://hackage.haskell.org/package/base-4.7.0.2/docs/System-Mem.html #v: performGC) 'Addr' लौटने से पहले। – Cirdec
@Cirdec क्या 'Addr'? –
आईआईआरसी, कचरा संग्रह हर बार चलाने का मौका मिलता है जब हास्केल कोड कुछ आवंटित करता है। यदि आपका प्रोग्राम अक्सर हास्केल में कॉल करता है, तो यह पर्याप्त होना चाहिए। अन्यथा, यदि आप हास्केल को बहुत अधिक समय तक स्मृति बनाए रखने की चिंता करते हैं, तो आप सी – chi