2013-03-23 15 views
6

द्वारा स्टैक आकार आयाम एक रिक्त कार्य का उपयोग कर रहे एक सी ++ प्रोग्राम के लिए, मैं इस फ़ंक्शन द्वारा कब्जे वाले गतिशील स्टैक आकार का मूल्यांकन कैसे कर सकता हूं?रिकर्सिव फ़ंक्शन

+0

यह फ़ंक्शन कितनी बार दोहराता है? –

+0

@delnan अगर बाइट्स की सही संख्या: तो वह 42 है। –

+0

हार्डवेयर/ओएस/कंपाइलर/अनुकूलन स्तर पर पूरी तरह से निर्भर है। इस प्रकार उत्तर देने के लिए लगभग असंभव। और अर्थहीन। तुम क्यो फिकर करते हो। यदि आपके ढेर को उड़ाने की भी संभावना है तो आपको एक पुनरावृत्ति समाधान का उपयोग करना चाहिए। –

उत्तर

7
void recursive_function() 
{ 
    int dummy; 
    cout << "stack = " << &dummy << '\n'; 
    ... 
} 

घड़ी ढेर उपयोग के रूप में &dummy वृद्धि के मूल्य (या गिर अगर आपके ढेर नीचे की ओर बढ़ता है) तक जाता है।

+1

या यदि आप एक गैर रैखिक स्टैक का उपयोग करते हैं तो स्मृति के चारों ओर कूदता है। –

+0

ठीक है, कम से कम ओपी को पता चलेगा कि उनके पास किस तरह का ढेर था। – john

+0

अच्छा जवाब है, लेकिन मुझे लगता है कि ढेर आकार बढ़ने के साथ 'और डमी' नीचे आते हैं ... –

2
#include <stdio.h> 
#include <stdlib.h> 

ssize_t recurse(int limit, char* stack = NULL) 
{ 
    char dummy; 

    if (stack == NULL) 
     stack = &dummy; 

    if (limit > 0) 
     return recurse(limit - 1, stack); 
    else 
     return stack - &dummy; 
} 

int main(int argc, char* argv[]) 
{ 
    int limit = atoi(argv[1]); 
    printf("depth %d took %zd bytes\n", limit, recurse(limit)); 
    return EXIT_SUCCESS; 
} 

अगर मैं 4 के साथ इस चलाने मैं:

depth 4 took 192 bytes 

दूसरों टिप्पणी में सुझाव दिया है के रूप में, यह पूरी तरह से पोर्टेबल नहीं है, लेकिन यह वर्तमान प्रणालियों के एक काफी विस्तृत विविधता पर काम करना चाहिए। ध्यान दें कि कुछ "अजीब" होने पर परिणाम प्रकार पर हस्ताक्षर किए जाते हैं - आप निश्चित रूप से इसे स्वच्छता के लिए जांच सकते हैं (कहें, सुनिश्चित करें कि यह 5 और 500 के बीच है, इस पर निर्भर करता है कि आपके फ़ंक्शन में और क्या है)।

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