2017-08-14 8 views
8

मैं हास्केल में उदाहरण स्थान लीक का संग्रह लिख रहा हूं, और यदि मैं वास्तव में लीक स्पेस नहीं लेता हूं तो ऐसे किसी भी उदाहरण को सम्मिलित करने के लिए एक टेस्ट सूट लिखना चाहूंगा।परीक्षण करें कि एक हास्केल फ़ंक्शन में स्पेस रिसाव है

क्या प्रत्येक के लिए अलग निष्पादन योग्य किए बिना उदाहरणों का परीक्षण करने का कोई तरीका है?

+4

नील मिशेल एक बहुत प्रभावी है और बहुत कम तकनीकी तकनीक अपने ब्लॉग पर वर्णित है: [का पता लगाने के अंतरिक्ष लीक ] (http: // neilmitchell.blogspot.com/2015/09/detecting-space-leaks.html)। – Cactus

+0

कुछ भविष्य में स्थिर विश्लेषकों का उपयोग करके इसे जांचना संभव होगा :) यदि इसे औपचारिक बनाया जा सकता है तो स्पेस लीक का पता लगाना केवल एल्गोरिदम लागू करने का मामला है। – Shersh

+0

@ कैक्टस: यह एक अच्छा लेख है। दुर्भाग्य से मुझे नहीं पता कि जब आप स्मृति से बाहर निकलते हैं तो अपवादों को पकड़ना संभव होता है (जो समझ में आता है)। मैंने 'System.Posix.process.forkProcess' के साथ किसी अन्य प्रक्रिया में अपवाद उत्पन्न करने और' ClassyPrelude.catchAny' के साथ इसे पकड़ने का प्रयास किया, लेकिन यह अभी भी परीक्षण सूट के माध्यम से फिसल जाता है और क्रैश करता है। – seagreen

उत्तर

2

आप परीक्षण के साथ एक अंतरिक्ष-रिसाव का पता लगा सकते हैं, लेकिन आप अंतरिक्ष लीक की अनुपस्थिति साबित नहीं कर सकते हैं। यहां तक ​​कि अगर मेमोरी प्रोफाइल अपेक्षाकृत कम है तो यह इंगित कर सकता है कि अंतरिक्ष रिसाव बहुत छोटा है और आपने पर्याप्त पुनरावृत्ति नहीं की है।

को यहां बताए गए अंतरिक्ष रिसाव का पता लगाने के लिए आप आवंटन सीमा और काउंटर का उपयोग कर सकते May I limit memory usage per function/monad/thread in Haskell?

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