2011-02-10 35 views
6

NET biên soạn có hai giai đoạnRun thời gian VS Compile thời gian (NET)

  • 1. Biên soạn mã IL.

  • 2. Biên dịch JIT thành mã gốc.

Cả hai giai đoạn này có thể được phân loại là thời gian biên dịch không? Hoặc việc biên dịch JIT thành mã gốc có dưới thời gian chạy không?

Về lỗi, nếu xảy ra lỗi ở giai đoạn hai, có phải là lỗi thời gian chạy không? (Bất kỳ lỗi xảy ra sau giai đoạn 2 tức là, khi các mã có nguồn gốc thực sự thực hiện phải là một lỗi thời gian chạy)

Trả lời

4

Theo hiểu biết của tôi -

Biên soạn C# để MSIL và biên dịch MSIL thành mã nguồn gốc hai các giai đoạn của quá trình biên dịch. Lỗi xảy ra ở cả hai giai đoạn là lỗi thời gian biên dịch.

Tuy nhiên, không chắc sẽ có bất kỳ lỗi biên dịch nào trong giai đoạn thứ hai (JIT). Nếu mã C# của bạn biên dịch chính xác thành MSIL thì nó chắc chắn sẽ được JITed mã gốc mà không có bất kỳ vấn đề nào.

IMO điều quan trọng nhất xảy ra trong quá trình JITing là tối ưu hóa cho nền tảng gốc.

Lỗi thời gian chạy là những lỗi xảy ra trong quá trình thực thi mã gốc JITed của bạn.

+1

Điều đó sẽ xảy ra nếu MSIL của bạn là _verifiable_ IL; IL không thể kiểm chứng có thể gây tràn bộ đệm và các lỗi khác giống như bộ lắp ráp thông thường (mặc dù chúng thường được CLR chọn để ném ngoại lệ). – thecoop

+0

http://download.microsoft.com/download/2/4/d/24dfac0e-fec7-4252-91b9-fb2310603f14/CLRUnderTheHood.BradA.ppt Theo PPT, trình biên dịch JIT và Mã gốc đều có trong phần thực thi. Điều này có nghĩa là chỉ biên dịch thời gian khi biên dịch sang IL. Giai đoạn JIT nên được chạy thời gian. Một báo cáo khác có liên quan có thể được truy cập từ bên dưới liên kết http://download.microsoft.com/download/e/2/1/e216b4ce-1417-41af-863d-ec15f2d31b59/DEV490.ppt – rjv

0

Một trường hợp trong đó quá trình biên dịch JIT có thể thất bại là khi xây dựng các cụm động với các thành viên System.Reflection.Emit.

Tôi coi đó là lỗi thời gian chạy, lỗi thời gian biên dịch là lỗi khi trình biên dịch C# phát hiện lỗi trong mã phát ra IL.

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