Về mặt tinh thần, tôi đã luôn tự hỏi làm thế nào thử/ném/bắt ngoại hình, khi biên dịch C++ dịch nó thành assembly. Nhưng kể từ khi tôi không bao giờ sử dụng nó, tôi không bao giờ có xung quanh để kiểm tra xem nó ra (một số người sẽ nói lười biếng).C++ try/throw/catch => mã máy
Ngăn xếp bình thường có được sử dụng để theo dõi try
s hoặc là ngăn xếp theo chủ đề riêng biệt được lưu giữ riêng cho mục đích này không? Việc triển khai giữa MSVC và g ++ lớn hay nhỏ? Xin vui lòng cho tôi xem một số giả asm (IA-32 là ok quá) vì vậy tôi không bao giờ phải kiểm tra xem nó ra bản thân mình! :)
Chỉnh sửa: Bây giờ tôi có được kiến thức cơ bản về triển khai MSVC về xử lý IA-32. Bất cứ ai biết cho g + + trên IA-32, hoặc bất kỳ CPU khác cho rằng vấn đề?
Điều đó bao gồm Xử lý ngoại lệ có cấu trúc của Windows, có liên quan đến, nhưng không giống như, xử lý ngoại lệ C++.Pietrek đề cập trong phần giới thiệu rằng ngoại lệ C++, như được thực hiện bởi Microsoft và Borland, sử dụng SEH, nhưng bài viết của ông không bao gồm * cách * họ thực hiện nó. –
Bài viết MSVC/IA-32 tuyệt vời, mặc dù dài. –
Ngoại lệ C++ chỉ là một lớp ngoại lệ SEH, với trình bao bọc để bao gồm thông tin C++ (cá thể lớp ngoại lệ). Các ngoại lệ C++ phải sử dụng SEH để chúng truyền các ranh giới hạt nhân, v.v. –