Câu lệnh chuyển đổi ngay lập tức rơi đến vị trí chính xác trong bộ nhớ như thế nào? Với các câu lệnh if lồng nhau, nó phải thực hiện các so sánh với mỗi câu lệnh, nhưng với một câu lệnh chuyển đổi nó đi trực tiếp đến đúng trường hợp. Điều này được thực hiện như thế nào?Cách báo cáo chuyển đổi hoạt động
Trả lời
Có nhiều cách khác nhau để biên dịch câu lệnh switch
thành mã máy. Dưới đây là một vài ví dụ:
Trình biên dịch có thể sản xuất một loạt các xét nghiệm, mà không phải là quá kém hiệu quả như chỉ khoảng log (N) kiểm tra là đủ để gửi một giá trị trong N thể các trường hợp.
Trình biên dịch có thể tạo bảng giá trị và địa chỉ bước nhảy, lần lượt sẽ được sử dụng bằng mã tra cứu chung (tuyến tính hoặc dichotomic, tương tự
bsearch()
) và cuối cùng chuyển đến vị trí tương ứng.Nếu giá trị trường hợp đủ dày, trình biên dịch có thể tạo bảng địa chỉ bước nhảy và mã kiểm tra xem giá trị chuyển đổi nằm trong phạm vi bao gồm tất cả giá trị của trường hợp và chuyển trực tiếp đến địa chỉ tương ứng. Đây có lẽ là việc triển khai gần nhất với mô tả của bạn: nhưng với tuyên bố chuyển đổi, nó sẽ chuyển trực tiếp đến đúng trường hợp.
Tùy thuộc vào khả năng cụ thể của CPU mục tiêu, cài đặt trình biên dịch, và số lượng và phân bố của các trường hợp giá trị, trình biên dịch có thể sử dụng một trong những cách tiếp cận trên này hay cách khác, hoặc một sự kết hợp của họ, hoặc thậm chí một số Các phương pháp khác.
Nhà thiết kế trình biên dịch dành nhiều nỗ lực cố gắng cải thiện chẩn đoán cho những lựa chọn này. Nhìn vào đầu ra lắp ráp hoặc sử dụng một công cụ trực tuyến như Godbolt's Compiler Explorer để xem các khả năng tạo mã khác nhau.
- 1. Chuyển đổi Báo cáo Oracle (.rdf) sang báo cáo BIRT
- 2. Báo cáo chuyển đổi có hại không?
- 3. Tạo báo cáo chuyển đổi bằng JavaPoet
- 4. Báo cáo chuyển đổi không hoạt động đối với các đối tượng số
- 5. Báo cáo chuyển đổi - sử dụng hoặc?
- 6. Cần trợ giúp- Báo cáo chuyển đổi
- 7. Báo cáo chuyển đổi/trường hợp
- 8. Chuyển đổi mẫu báo cáo RPT/RDL sang báo cáo JRXML/Jasper?
- 9. Dịch vụ báo cáo: Tablix RepeatColumnHeaders không hoạt động trên một số báo cáo
- 10. Báo cáo web (lỗi web) hoạt động như thế nào?
- 11. Báo cáo chuyển đổi điều kiện trong PHP
- 12. Sử dụng "||" trong báo cáo chuyển đổi trong java
- 13. Hiệu quả: chuyển đổi báo cáo trên nếu phát biểu
- 14. Binding GradientStop hoạt động nhưng báo cáo lỗi
- 15. hoạt động chuyển đổi không có hoạt ảnh
- 16. Dịch vụ báo cáo máy chủ SQL: cách dừng báo cáo kích hoạt khi mở
- 17. Cách "Máy chủ quảng cáo" hoạt động?
- 18. Lệnh chuyển đổi hoạt động như thế nào?
- 19. Cách dễ dàng cho Báo cáo tinh thể sang MS SQL Server Reporting Services chuyển đổi
- 20. Báo cáo tinh thể nhóm động 9
- 21. lỗi Android trong quá trình chuyển đổi slide Hoạt động
- 22. làm cách nào để sử dụng giá trị enum trên báo cáo chuyển đổi trong C++
- 23. Làm cách nào để nhận chức năng báo cáo 'chuyển đổi' trong các mẫu Django?
- 24. Làm cách nào để hiển thị Báo cáo hoạt động WebViewer trong ASP.NET MVC
- 25. Xcode - thay đổi các quy tắc thụt đầu dòng cho báo cáo chuyển đổi
- 26. Chuyển đổi CSS3 không hoạt động
- 27. Javascript hoạt động như chuyển đổi css3
- 28. Cách tự động kiểm tra các báo cáo trong SSRS
- 29. Tạo báo cáo knitr
- 30. Báo cáo khác biệt tự động
Trình biên dịch của bạn có thể có một lá cờ để cho bạn thấy mã lắp ráp mà nó tạo ra ... Spoiler: thường lần nó giống như một bó if-s –
Điều gì khiến bạn nghĩ vậy? Và 'if' thì không? Vui lòng cung cấp tham chiếu đến nơi tiêu chuẩn hỗ trợ xác nhận của bạn. – Olaf
@DavidConnolly: bạn có thể chấp nhận câu trả lời không? – chqrlie