2012-07-04 19 views
26

में कैसे बढ़ा सकता हूं यह रेंज त्रुटि पढ़ने वाले नोड में त्रुटि संदेश से संबंधित अन्य प्रश्नों के लिए अलग है: अधिकतम कॉल स्टैक आकार से अधिक है, मुझे पता है कि मुझे यह क्यों मिल रहा है त्रुटि संदेश। ऐसा इसलिए हो रहा है क्योंकि मैं वास्तव में काफी हद तक रिकर्स कर रहा हूं।मैं अधिकतम कॉल स्टैक आकार को Node.js

धन्यवाद।

उत्तर

53

node --help से:

node --max-stack-size=val 

अद्यतन: टिप्पणियों से संकेत मिलता है के रूप में, भले ही सहायता पाठ अभी भी --max-stack-size विकल्प, नोड v0.10.x आप के बजाय --stack-size उपयोग करने की आवश्यकता में सूचीबद्ध करता है।

node --stack-size=val 
+1

बैंग !!! स्वीकार करने के लिए 10 मिनट का इंतजार, लेकिन हाँ यह बैजर है। धन्यवाद। –

+0

अभी स्पष्ट है कि मैं देख रहा हूं --help :) –

+0

http://code.google.com/p/v8/issues/detail?id=1764 पर विचार करें यदि आप विंडोज – Esailija

4

नोड संस्करण 5 और 6 में, मैं अधिकतम ढेर आकार सेट करने के लिए उस विकल्प को सत्यापित किया है "--stack_size" (एक अंडरस्कोर से) है:

$ node --v8-options 
[...] 
--stack_size (default size of stack region v8 is allowed to use (in kBytes)) 
     type: int default: 984 

अधिकतम ढेर आकार को बढ़ाने के लिए , बस कुछ इस तरह जारी करें:

$ node --stack_size=1200 

जैसा कि अन्य लोगों ने उल्लेख किया है, इस बात को ध्यान में रखें कि इस मूल्य को बढ़ाने से विभाजन विभाजन हो सकता है। संस्करण 6 के साथ मेरे लिए अधिकतम सुरक्षित मूल्य 1361 है, लेकिन संस्करण 5 के साथ उच्च लगता है।

बड़ी तस्वीर को देखते हुए, स्टैक आकार में वृद्धि आपके सभी मुद्दों को हल नहीं कर सकती है। नोड में रिकर्सिव फ़ंक्शंस लिखते समय, आपकी सबसे अच्छी रणनीति उन्हें tail-recursivemanner में लिखना है, क्योंकि संस्करण 6 उचित पूंछ कॉल का समर्थन करता है। यह ढेर आकार ओवरफ्लो को खत्म कर देगा।

+0

समस्या यह है कि स्टैक - मानचित्र, प्रत्येक के लिए, Promise.all को भरने के कई तरीके हैं .... –

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