Nếu ngoại lệ xảy ra trong khối try
, cách thực thi được chuyển đến khối catch
? Đây không phải là câu hỏi C#/Java/C++, tôi chỉ tự hỏi nó hoạt động như thế nào trong nội bộ.Các khối try/catch được triển khai như thế nào?
Trả lời
đây không phải là câu hỏi C#/java/C++. Làm thế nào nó hoạt động nội bộ, làm thế nào dòng biết để đi bắt tuyên bố.
Cách thức hoạt động bên trong làm cho câu hỏi này C#/java/C++ khá nhiều (vì nó sẽ được triển khai khác nhau).
Trong Java, khối thử tự cài đặt vào bảng đặc biệt (trong tệp lớp). Khi JVM đưa ra một ngoại lệ, nó nhìn vào bảng đó để xem nơi bắt giữ tiếp theo hoặc cuối cùng là khối để đi đến là.
Khi ngoại lệ xảy ra, lệnh đặc biệt được thực hiện (thường được gọi là ngắt). Điều này dẫn đến việc thực hiện một trình xử lý lỗi chung mà suy ra đó là trình xử lý ngoại lệ phù hợp được cài đặt mới nhất. Trình xử lý đó sau đó được thực hiện.
nó nên làm việc trong tất cả các langues hơi như thế này:
if (error_occured xy while doing things in try){
call_catch_part(error xy)
}
Nó là cơ bản phân tích nguyên tắc cơ bản của ngôn ngữ. Bạn có thể nhận tất cả thông tin tại Here
Có sự khác biệt cách ngoại lệ được xử lý kỹ thuật giữa các ngôn ngữ được biên dịch tự nhiên như C++ và ngôn ngữ sử dụng mã byte đang được thực hiện trên máy ảo như Java hoặc C#.
Trình biên dịch C++ thường tạo mã giao thức thông tin cần thiết để xử lý ngoại lệ khi chạy. Một cấu trúc dữ liệu chuyên dụng được sử dụng để ghi nhớ lối vào/thoát của các khối thử và trình xử lý ngoại lệ liên quan. Khi một ngoại lệ xảy ra, một ngắt được tạo ra và điều khiển được truyền cho hệ điều hành mà lần lượt kiểm tra ngăn xếp cuộc gọi và xác định trình xử lý ngoại lệ cần gọi.
Thông tin chi tiết được giải thích khá tốt trong bài viết sau bởi Vishal Kochhar:
Trong Java hay .NET không có nhu cầu sử dụng chi phí của việc duy trì ngoại lệ xử lý thông tin khi thời gian chạy sẽ có thể xem xét mã byte để tìm trình xử lý ngoại lệ có liên quan. Kết quả là, chỉ có các ngoại lệ thực sự được ném đang gây ra một chi phí.
- 1. OpenID được triển khai như thế nào?
- 2. HttpSession được triển khai như thế nào?
- 3. Các tham chiếu yếu được triển khai như thế nào?
- 4. Các mảng được triển khai trong Perl như thế nào?
- 5. Các mutex được triển khai như thế nào?
- 6. Các mảng được triển khai trong java như thế nào?
- 7. Máy tính Google được triển khai như thế nào?
- 8. Atan2 được triển khai bằng .NET như thế nào?
- 9. Facebook Chat Heads được triển khai như thế nào?
- 10. Phạm vi Lexical được triển khai như thế nào?
- 11. IO không chặn được triển khai như thế nào?
- 12. Bản đồ băm JavaScript được triển khai như thế nào?
- 13. C# Generics được triển khai như thế nào?
- 14. GetHashCode() được triển khai cho Int32 như thế nào?
- 15. LLVM isa <> được triển khai như thế nào?
- 16. Chuỗi string.find được triển khai như thế nào trong CPython?
- 17. Thuộc tính phụ thuộc được triển khai như thế nào?
- 18. Arrays.sort (Object [] a) - được triển khai như thế nào?
- 19. GMail triển khai Comet như thế nào?
- 20. Từ khóa java được đồng bộ hóa được triển khai như thế nào?
- 21. Các ứng dụng Java được triển khai như thế nào trong "thế giới thực"?
- 22. Xử lý ngoại lệ được triển khai bằng ngôn ngữ lập trình như thế nào?
- 23. Các cụm từ thông dụng được triển khai như thế nào trong .NET?
- 24. Bảng băm được triển khai nội bộ bằng các ngôn ngữ phổ biến như thế nào?
- 25. Các chỉ mục thông thường và tổng hợp được triển khai trong RDB như thế nào?
- 26. Điểm ngắt trình gỡ rối được triển khai hiệu quả như thế nào?
- 27. Việc triển khai các ứng dụng .NET so với việc triển khai các ứng dụng web Java như thế nào?
- 28. Lớp Object được triển khai như thế nào (các phương thức như hashCode và các trường nội bộ)?
- 29. Việc triển khai BigNums hoạt động như thế nào?
- 30. Forth triển khai từ điển như thế nào? (tranh cãi)
đó là tất cả được biết .. xử lý con thực hiện đầu tiên .. Tôi đang mong đợi câu trả lời từ phần mềm hệ thống/lắp ráp /.net framework – selvaraj
bạn có thể giải thích rằng hướng dẫn đặc biệt mà bạn nghĩ là – selvaraj
@saj: Trong các chương trình C++ gốc, một lệnh xử lý đặc biệt 'int' được sử dụng, được thực thi và dừng chương trình và sau đó điều khiển sẽ tự động được chuyển đến bộ xử lý ngắt hệ điều hành lần lượt thấy rằng đó là một ngoại lệ C++ và chuyển điều khiển đến trình xử lý ngoại lệ C++. – sharptooth