2010-02-13 27 views
5

"Đống đổ rác" là gì? Hoặc "một đống rác"? (Vì tôi không biết định nghĩa, tôi không chắc đó có phải là thuật ngữ có thể đếm được hay không đếm được)."Đống đổ rác" là gì?

+0

Đó không phải là cụm từ mà tôi từng nghe - ngữ cảnh là gì? Tôi đã nghe mọi người nói rằng họ đã 'trashed the stack', có nghĩa là họ đã truy cập một con trỏ xấu và ghi đè lên một số ngăn xếp, khiến chương trình gặp sự cố lạ và thú vị (và khó gỡ lỗi). –

+0

Tôi thường nghe nói rằng được gọi là "đập ngăn xếp". –

+0

thùng rác hoặc thrash .. IMO nó có thể là một cái gì đó như ngăn xếp smashing.nt chắc chắn – sud03r

Trả lời

4

Stack thrashing giống như cú đánh đống, nhưng trên ngăn xếp.

Hiện tại, điều đó đã được giải thích.

Ồ, bạn muốn biết thêm chi tiết huh?

Nếu bạn mô phỏng một bộ xử lý dựa trên ngăn xếp trên bộ xử lý không phải là bạn đang đập ngăn xếp.

Nếu mã C của bạn malloc và miễn phí của tất cả các dòng mã khác, bạn đang đập đống.

Điểm ngăn xếp là một vấn đề là nếu bạn lược tả mã của mình, CPU sẽ chi tiêu khá nhiều vào thời gian của nó.

Đập đống là malloc() & miễn phí() là # 1 & # 2 các chức năng được sử dụng nhiều nhất.

Bây giờ, một số CPU (rockwell make some) thực sự được tối ưu hóa để chạy ngôn ngữ dựa trên ngăn xếp trong phần cứng.

  • ram nội bộ mà lưu trữ N kilobtyes đỉnh ngăn xếp bên trong CPU
  • vài thanh ghi
  • Tất cả các hướng dẫn chồng tương

Lạ lùng thay, Java Virtual Machine là một mô hình dựa trên stack.

Chạy một triển khai FORTH thực sự câm trên phần cứng x86 sẽ đẩy mạnh ngăn xếp. Loại điều bạn có thể viết sau khi đọc thông số kỹ thuật Forth, vì vậy bạn phát ra mã máy x86 để có hướng dẫn và DONT tối ưu hóa nó. Forth guys, tôi xin lỗi, tôi biết implmentations của bạn là tốt hơn rất nhiều.

Postscript là dựa trên quá, mà làm cho máy in postscript sớm thú vị: họ có ram giới hạn và CPU chậm: và chạy một ngôn ngữ stack-thrashing. Tôi chắc chắn rất nhiều nỗ lực đã đi vào những thứ như Apple Laserwriter ban đầu để làm cho nó chạy tốt hơn. Nó có một CPU 68000 Motorola chạy ở (10ish) megahertz và 1Mb ram IIRC.

Một lần nữa, ngăn xếp thrashers.

Trợ giúp đó có hữu ích không?

+0

Nếu tôi tìm lại tham chiếu gốc, tôi sẽ đưa ra định nghĩa này và thử xem nó có phù hợp không.Nhưng nó chắc chắn có ý nghĩa, chấp nhận rằng tôi đã viết "thrash" và giải quyết các câu hỏi và từ khóa như-là, và phù hợp với định nghĩa tiếng Anh của từ này. Cảm ơn rất nhiều, Tim. – talkaboutquality

1

Tôi chưa bao giờ gặp thuật ngữ này, và số lần truy cập Google và Wikipedia hàng đầu không mô tả.

Tuy nhiên, có vẻ như tương tự với đĩa thrash là việc sử dụng đĩa không hiệu quả. Đó không phải là áp dụng trực tiếp cho một ngăn xếp - mà không tương ứng với bất cứ thứ gì cơ khí. Có thể nó liên quan đến lỗi trang, điều này sẽ dẫn đến mối quan hệ không hiệu quả về mặt máy móc. Hoặc ngăn xếp tràn được sửa chữa bởi một số biện pháp khắc phục điều hành/hạt nhân đắt tiền.

Một số ngữ cảnh cho thuật ngữ sẽ hữu ích.

+0

+1 i am hào phóng ..: P – sud03r

2

Tôi đã nhìn thấy thuật ngữ này được sử dụng trong ngữ cảnh của Forth, nơi thiếu truy cập khung ngăn xếp đôi khi yêu cầu sử dụng quá nhiều thao tác ngăn xếp ("đập ngăn xếp") để đến một số từ nhất định.

Ngoài ra, This glossary định nghĩa nó là "Mở rộng ngăn xếp thường xuyên (tràn) và co (tràn)". Rõ ràng một định nghĩa cần giải thích thêm. Có lẽ ai đó quen thuộc hơn với Cray X1 có thể giải thích.

1

Tôi nghe cụm từ "ngăn xếp đống" trong bối cảnh ngăn xếp ngăn xếp, nhưng tôi nghĩ nó thường được gọi là "ngăn xếp đập". Stack smashing có nghĩa là bất kỳ loại lỗ hổng khai thác stack nào (như buffer overflows). Đó là lý do tại sao bảo vệ ngăn xếp GCC được gọi là SSP (Stack-Smashing Protector).

+1

"thrash" <> "smash" – talkaboutquality

0

Tôi đã nghe một lần "bẻ khóa ngăn xếp" (không có dấu h đầu tiên) theo nghĩa "làm hỏng ngăn xếp", ví dụ: khi một hàm nhận/đặt nhiều byte hơn từ/trên ngăn xếp, nó sẽ làm lộn xộn con trỏ ngăn xếp và làm cho nó không thể hoạt động chính xác sau đó. Điều này có thể xảy ra khi bạn gọi hàm bên ngoài với quy ước gọi sai (ví dụ: khi hàm trong dll là stdcall nhưng bạn khai báo nó là cdecl) hoặc khi bạn gọi hàm variadic như printf hoặc scanf truyền sai định dạng chuỗi, do đó, nó bật nhiều hơn/ít byte hơn nó có thể.

+0

"thrash" <> "trash" – talkaboutquality

+0

Tôi biết, nhưng vì tôi chưa bao giờ nghe nói rằng tôi nghĩ rằng có lẽ anh ta có thể đã nhầm lẫn nó . –

1

Tôi chắc chắn rằng cụm từ này là hoàn toàn thông tục và không có ý nghĩa chính xác. Bạn có một trích dẫn cụ thể hoặc liên kết đến nơi bạn đã thấy nó được sử dụng?

Nếu không có bất kỳ định nghĩa kỹ thuật chính xác nào, tôi đề nghị rằng điều đó có nghĩa là bất kỳ người dùng nào của cụm từ đó nghĩ nó có nghĩa là gì. Tôi có thể giả sử được áp dụng cho bất kỳ loại lạm dụng nào hoặc sử dụng không hiệu quả ngăn xếp, nhưng vì tất cả điều đó thường xảy ra trong một thao tác ngăn xếp là con trỏ ngăn xếp được di chuyển sẽ khó xác định những gì sẽ thành 'trashing' hành vi bình thường và mong muốn. Trong một ứng dụng đa luồng, trong đó mỗi luồng có ngăn xếp riêng, chuyển đổi ngữ cảnh sẽ ngụ ý chuyển đổi nhanh chóng các ngăn xếp, nhưng sự kiện đó hoàn toàn và ít được mô tả một cách mơ hồ hơn bằng cụm từ "nhiệm vụ-đập".

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