Обработка исключений во время выполнения (например, деление на ноль) в JVM (Java) или CLR (C #) - PullRequest
3 голосов
/ 26 июня 2010

Как JVM или, если уж на то пошло, обработчики CLR (Common Language Runtime) делятся на ноль? Проверяет ли он знаменатель каждый раз перед выполнением инструкции деления? Или это обрабатывается с помощью функции обратного вызова, которая вызывается, когда процессор подает ловушку «делим на ноль»?

Любой вклад будет оценен.

Спасибо, Alan

Ответы [ 2 ]

6 голосов
/ 26 июня 2010

Все известные мне процессоры генерируют аппаратную ловушку для этого.Который обрабатывается операционной системой и отражается в коде режима пользователя с помощью механизма, зависящего от ОС (сигнал, исключение и т. Д.).Который исполняющая среда обнаруживает и переводит в исключение Java или .NET.

1 голос
/ 26 июня 2010

Это деталь реализации, так как вам не нужно заботиться о том, что происходит под капотом виртуальной машины (если бы вам пришлось позаботиться об этом, вы бы потеряли истинную переносимость!).

Однако, поскольку управляемый код объединяется, деление всегда выполняется, и в случае нулевого знаменателя процессор сгенерирует исключение первого шанса, которое будет обнаружено средой выполнения и затем отражено как исключение высокого уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...