2013-03-23 37 views
6

Đối với chương trình C++ đang sử dụng hàm đệ quy, làm thế nào tôi có thể đánh giá kích thước ngăn xếp động bị chiếm bởi hàm này?Kích thước kích thước ngăn xếp được ocupied bởi hàm đệ quy

+0

Chức năng này lặp lại bao nhiêu lần? –

+0

@delnan Nếu số byte chính xác: thì đó là 42. –

+0

Hoàn toàn phụ thuộc vào Phần cứng/Hệ điều hành/Trình biên dịch/Tối ưu hóa. Do đó gần như không thể trả lời được. Và vô nghĩa. Bạn quan tâm làm gì. Nếu thậm chí có khả năng thổi chồng của bạn thì bạn nên sử dụng một giải pháp lặp đi lặp lại. –

Trả lời

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

Tăng giá trị sử dụng ngăn xếp tăng lên (hoặc giảm nếu ngăn xếp của bạn tăng xuống).

+1

Hoặc nhảy xung quanh bộ nhớ nếu bạn sử dụng ngăn xếp không tuyến tính. –

+0

OK, ít nhất OP sẽ biết họ có loại ngăn xếp nào. – john

+0

câu trả lời hay nhưng tôi nghĩ rằng '& dummy' đi xuống như tăng kích thước ngăn xếp ... –

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; 
} 

Nếu tôi chạy này với 4 tôi nhận được:

depth 4 took 192 bytes 

Như những người khác đã gợi ý trong ý kiến, điều này không hoàn toàn di động, nhưng nó phải làm việc trên một loạt khá rộng của hệ thống hiện tại. Lưu ý rằng kiểu kết quả được ký trong trường hợp một cái gì đó "lạ" xảy ra - bạn chắc chắn có thể kiểm tra nó cho sự tỉnh táo (nói, đảm bảo nó nằm trong khoảng từ 5 đến 500, tùy thuộc vào chức năng của bạn).

Các vấn đề liên quan