Сообщение Re[3]: Разработка на чистом C от 31.10.2016 6:46
Изменено 31.10.2016 6:51 Pavel Dvorkin
Здравствуйте, push, Вы писали:
P>Здравствуйте, smeeld, Вы писали:
S>>Обработка исключений в С++ слишком дорогая операция,
P>По сравнению с чем? По сравнению с полным отказом от обработки ошибок — то да, дорогая. А если сравнивать с ручной обработкой ошибок — так можно сказать ничего не стоит.
Error code time = 15
Try catch time = 9000
Компилировать в Debug. Для Release Error code time будет просто 0, так как компилятор выкинет весь этот код с вызовом функции. Выкинуть код с исключением он не может.
Так что не надо заявлять, что обработкак исключений столь уже дешева. Это все же вызов ядра (throw в VC++ вызывает RaiseException)
P>Здравствуйте, smeeld, Вы писали:
S>>Обработка исключений в С++ слишком дорогая операция,
P>По сравнению с чем? По сравнению с полным отказом от обработки ошибок — то да, дорогая. А если сравнивать с ручной обработкой ошибок — так можно сказать ничего не стоит.
int ErrorCodeFunction()
{
return 1;
}
void ThrowFunction() {
throw 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD dwTimeStart, dwTimeEnd;
int count = 1000000;
dwTimeStart = GetTickCount();
for (int i = 0; i < count; i++)
{
int result = ErrorCodeFunction();
}
dwTimeEnd = GetTickCount();
printf("Error code time = %d\n", dwTimeEnd - dwTimeStart);
dwTimeStart = GetTickCount();
for (int i = 0; i < count; i++)
{
try {
ThrowFunction();
}
catch(...) {}
}
dwTimeEnd = GetTickCount();
printf("Try catch time = %d\n", dwTimeEnd - dwTimeStart);
return 0;
}Error code time = 15
Try catch time = 9000
Компилировать в Debug. Для Release Error code time будет просто 0, так как компилятор выкинет весь этот код с вызовом функции. Выкинуть код с исключением он не может.
Так что не надо заявлять, что обработкак исключений столь уже дешева. Это все же вызов ядра (throw в VC++ вызывает RaiseException)
Re[3]: Разработка на чистом C
Здравствуйте, push, Вы писали:
P>Здравствуйте, smeeld, Вы писали:
S>>Обработка исключений в С++ слишком дорогая операция,
P>По сравнению с чем? По сравнению с полным отказом от обработки ошибок — то да, дорогая. А если сравнивать с ручной обработкой ошибок — так можно сказать ничего не стоит.
Error code time = 15
Try catch time = 9000
Компилировать в Debug. Для Release Error code time будет просто 0, так как компилятор выкинет весь этот код с вызовом функции. Выкинуть код с исключением он не может.
Так что не надо заявлять, что обработка исключений столь уже дешева. Это все же вызов ядра (throw в VC++ вызывает RaiseException)
P>Здравствуйте, smeeld, Вы писали:
S>>Обработка исключений в С++ слишком дорогая операция,
P>По сравнению с чем? По сравнению с полным отказом от обработки ошибок — то да, дорогая. А если сравнивать с ручной обработкой ошибок — так можно сказать ничего не стоит.
int ErrorCodeFunction()
{
return 1;
}
void ThrowFunction() {
throw 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD dwTimeStart, dwTimeEnd;
int count = 1000000;
dwTimeStart = GetTickCount();
for (int i = 0; i < count; i++)
{
int result = ErrorCodeFunction();
}
dwTimeEnd = GetTickCount();
printf("Error code time = %d\n", dwTimeEnd - dwTimeStart);
dwTimeStart = GetTickCount();
for (int i = 0; i < count; i++)
{
try {
ThrowFunction();
}
catch(...) {}
}
dwTimeEnd = GetTickCount();
printf("Try catch time = %d\n", dwTimeEnd - dwTimeStart);
return 0;
}Error code time = 15
Try catch time = 9000
Компилировать в Debug. Для Release Error code time будет просто 0, так как компилятор выкинет весь этот код с вызовом функции. Выкинуть код с исключением он не может.
Так что не надо заявлять, что обработка исключений столь уже дешева. Это все же вызов ядра (throw в VC++ вызывает RaiseException)