2012-01-18 40 views
6

Gần đây tôi đã gặp lỗi với "ngăn xếp linux" và "kích thước ngăn xếp của linux". Tôi đã xem qua một blog chỉ đạo tôi phải cố gắngNgăn xếp Linux là gì?

ulimit -a 

để xem những gì quá giới hạn cho hộp của tôi là, và nó được thiết lập để 8192kb mà dường như là mặc định.

"Ngăn xếp Linux" là gì? Nó hoạt động như thế nào, nó lưu trữ cái gì, nó làm gì?

+3

http://en.wikipedia.org/wiki/Call_stack –

+0

một chồng tràn có thể xuất hiện với quá sâu (hoặc vô hạn) đệ quy. Hoặc có lẽ bằng cách lạm dụng 'alloca' (hoặc tương đương, như mảng biến đổi chiều dài) trong mã C. –

+0

Liên quan: http://stackoverflow.com/questions/17671423/stack-allocation-for-process | http://unix.stackexchange.com/questions/145557/how-does-stack-allocation-work-in-linux/239323#239323 –

Trả lời

7

Câu trả lời ngắn gọn là:

Khi chương trình trên Linux của bạn hộp thoại run, họ thêm và xóa dữ liệu từ the stack một cách thường xuyên như các chương trình chức năng. Kích thước ngăn xếp, tham chiếu đến dung lượng được cấp phát trong bộ nhớ cho ngăn xếp. Nếu bạn tăng kích thước ngăn xếp, cho phép chương trình tăng số lượng các thói quen có thể được gọi. Mỗi lần một hàm được gọi, dữ liệu có thể được thêm vào ngăn xếp (xếp chồng lên trên cùng của dữ liệu thường trình cuối cùng.)

Trừ khi chương trình rất phức tạp, hoặc được thiết kế cho mục đích đặc biệt, kích thước ngăn xếp 8192kb là bình thường. Một số chương trình như chương trình xử lý đồ họa yêu cầu bạn tăng kích thước của ngăn xếp để hoạt động. Vì chúng có thể lưu trữ rất nhiều dữ liệu trên ngăn xếp.

Hãy thoải mái tăng kích thước ngăn xếp cho các ứng dụng đó, nó không phải là vấn đề. Để làm như vậy, sử dụng

ulimit -s bytes

BTW, What is a StackOverflowError?

+0

Cảm ơn rất nhiều vì câu trả lời. Tôi đã nhận được lỗi 'SystemStackError: stack level too deep' trong ứng dụng Ruby và muốn hiểu rõ hơn về các nguyên tắc cơ bản trước khi tôi tiếp tục điều tra. – jaredonline

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