Попытка/бросок/выгода C++ => машинный код

Я решил этот выпуск:

  1. Добавление пользовательского заголовка к ответу:

    public ActionResult Index(){
        if (!HttpContext.User.Identity.IsAuthenticated)
        {
            HttpContext.Response.AddHeader("REQUIRES_AUTH","1");
        }
        return View();
    }
    
  2. Привязка JavaScript функционирует к ajaxSuccess событие и проверка, чтобы видеть, существует ли заголовок:

    $(document).ajaxSuccess(function(event, request, settings) {
        if (request.getResponseHeader('REQUIRES_AUTH') === '1') {
           window.location = '/';
        }
    });
    

41
задан Lightness Races with Monica 12 February 2012 в 17:22
поделиться

5 ответов

Microsoft Journal's В серии "Под капотом" эта тема была подробно рассмотрена еще в 1997 году:

Краткий курс по глубине структурированной обработки исключений Win32 ™

10
ответ дан 27 November 2019 в 00:51
поделиться

Взгляните на этот документ , в котором довольно хорошо описаны внутренние механизмы обработки исключений.

0
ответ дан 27 November 2019 в 00:51
поделиться
16
ответ дан 27 November 2019 в 00:51
поделиться

Плохие реализации обработчиков исключений помещают какой-то блок обработчика исключений для каждого предложения try в стеке времени выполнения, когда вводится предложение try, и выталкивают его выключен при выходе из предложения try. Также сохраняется местоположение, содержащее адрес самого последнего отправленного блока обработчика исключений. Обычно эти обработчики исключений объединены в цепочку, поэтому их можно найти, перейдя по ссылкам от самых последних к более старым версиям. Когда возникает исключение, обнаруживается указатель на последний нажатый блок обработчика EH, и проверяется обработка случаев EH этого предложения "try". Попадание в регистр EH приводит к тому, что очистка стека происходит обратно до точки, в которой нажат EH, и управление передается случаю EH. Отсутствие попаданий в EH приводит к обнаружению следующего EH, и процесс повторяется. 32-разрядная схема SEH Windows является версией этого.

Это плохая реализация, потому что программа платит цену времени выполнения за каждое предложение try (push, затем pop), даже если не возникает никаких исключений.

Хорошие реализации просто записывают таблицу диапазонов, в которых встречаются предложения try. Это означает нулевые накладные расходы на вход / выход из предложения try. (Мой PARLANSE язык параллельного программирования использует эту технику). Исключение ищет ПК точки исключения в таблице и передает управление EH, выбранному таблицей. Код EH сбрасывает стек соответствующим образом. Быстро и красиво. и передача управления в дело EH. Отсутствие попаданий в EH приводит к обнаружению следующего EH, и процесс повторяется. 32-разрядная схема SEH Windows является версией этого.

Это плохая реализация, потому что программа платит цену времени выполнения за каждое предложение try (push, затем pop), даже если не возникает никаких исключений.

Хорошие реализации просто записывают таблицу диапазонов, в которых встречаются предложения try. Это означает нулевые накладные расходы на вход / выход из предложения try. (Мой PARLANSE язык параллельного программирования использует эту технику). Исключение ищет ПК точки исключения в таблице и передает управление EH, выбранному таблицей. Код EH сбрасывает стек соответствующим образом. Быстро и красиво. и передача управления в дело EH. Отсутствие попаданий в EH приводит к обнаружению следующего EH, и процесс повторяется. 32-разрядная схема SEH в Windows является версией этого.

Это плохая реализация, потому что программа платит цену времени выполнения за каждое предложение try (push, затем pop), даже если не возникает никаких исключений.

Хорошие реализации просто записывают таблицу диапазонов, в которых встречаются предложения try. Это означает нулевые накладные расходы на вход / выход из предложения try. (Мой PARLANSE язык параллельного программирования использует эту технику). Исключение просматривает ПК точки исключения в таблице и передает управление EH, выбранному таблицей. Код EH сбрасывает стек соответствующим образом. Быстро и красиво. 32-разрядная схема SEH Windows является версией этого.

Это плохая реализация, потому что программа платит цену времени выполнения за каждое предложение try (push, затем pop), даже если не возникает никаких исключений.

Хорошие реализации просто записывают таблицу диапазонов, в которых встречаются предложения try. Это означает нулевые накладные расходы на вход / выход из предложения try. (Мой PARLANSE язык параллельного программирования использует эту технику). Исключение ищет ПК точки исключения в таблице и передает управление EH, выбранному таблицей. Код EH сбрасывает стек соответствующим образом. Быстро и красиво. 32-разрядная схема SEH Windows является версией этого.

Это плохая реализация, потому что программа платит цену времени выполнения за каждое предложение try (push, затем pop), даже если не возникает никаких исключений.

Хорошие реализации просто записывают таблицу диапазонов, в которых встречаются предложения try. Это означает нулевые накладные расходы на вход / выход из предложения try. (Мой PARLANSE язык параллельного программирования использует эту технику). Исключение ищет ПК точки исключения в таблице и передает управление EH, выбранному таблицей. Код EH сбрасывает стек соответствующим образом. Быстро и красиво. Это означает нулевые накладные расходы на вход / выход из предложения try. (Мой PARLANSE язык параллельного программирования использует эту технику). Исключение просматривает ПК точки исключения в таблице и передает управление EH, выбранному таблицей. Код EH сбрасывает стек соответствующим образом. Быстро и красиво. Это означает нулевые накладные расходы на вход / выход из предложения try. (Мой PARLANSE язык параллельного программирования использует эту технику). Исключение ищет ПК точки исключения в таблице и передает управление EH, выбранному таблицей. Код EH сбрасывает стек соответствующим образом. Быстро и красиво. Я думаю, что Windows 64-битная EH относится к этому типу, но я не смотрел внимательно.

21
ответ дан 27 November 2019 в 00:51
поделиться

Комитет по стандартизации C ++ опубликовал технический отчет о «Производительности C ++», чтобы развенчать многие мифы о том, как функции C ++ якобы замедляют работу. Это также включает подробности о том, как может быть реализована обработка исключений. Черновик этого технического отчета доступен бесплатно. См. Раздел 5.4.1. «Проблемы и методы реализации обработки исключений».

4
ответ дан 27 November 2019 в 00:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: