2010-08-24 41 views
7

Tôi đang viết một thuật toán tràn ngập đệ quy để tìm các thành phần được kết nối trong một hình ảnh, mã của tôi biên dịch và chạy tốt với trình biên dịch MSVC 2008; nhưng nhị phân biên dịch mingw bị lỗi khi chạy.Tăng kích thước ngăn xếp khi biên dịch với mingw?

Sau khi tôi chuyển đổi thuật toán thành không đệ quy với std :: stack, mọi thứ diễn ra tốt đẹp.

Nhưng nếu tôi phải sử dụng thuật toán đệ quy trong một số trường hợp và mingw không thể xử lý nó?

Làm cách nào để tăng kích thước ngăn xếp nhị phân, có bất kỳ tùy chọn biên dịch nào không?

Cảm ơn

+0

Ngoài ra: Sử dụng * scanline * điền lũ. Nó thường không đòi hỏi nhiều không gian ngăn xếp. Ngoài ra: Sử dụng ngăn xếp của riêng bạn và làm cho hàm của bạn lặp lại. – sellibitze

Trả lời

12

Sử dụng

gcc -Wl,--stack,N 

trong đó N là ngăn xếp kích thước. Ví dụ. gcc -Wl,--stack,4194304

0

có lẽ là lựa chọn tốt nhất là sử dụng pthreads để bắt đầu một chủ đề mới và chạy thuật toán của bạn trong các chủ đề mới. Một trong các thông số là pthread_createpthread_attr_t. Sử dụng thuộc tính này, bạn có thể chỉ định kích thước ngăn xếp (bằng cách gọi pthread_attr_setstacksize).

Edit: Cho dù công việc này hay không là phụ thuộc vào sự hỗ trợ của các lớp tương thích tiềm ẩn

0

Có thể tăng kích thước ngăn xếp không phải là giải pháp bạn muốn. Những hạn chế này tồn tại vì một lý do. Nó cũng có thể xảy ra rằng trong một tương lai gần thuật toán của bạn sẽ sử dụng không gian ngăn xếp nhiều hơn và bạn sẽ phải tăng nó một lần nữa.

Có lẽ bạn nên xem xét chuyển đổi thuật toán thành thuật toán không đệ quy. Điều này có thể được thực hiện cho mọi thuật toán. See this discussion

Và có thể bạn sẽ đạt được một cải thiện hiệu suất cũng

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