Re[6]: Разработка на чистом C
От: _NN_  
Дата: 31.10.16 15:34
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

Ок более приближённый тест функция верхнего уровня не оптимизируется , скажем это функция обратного вызова.
#include <windows.h>

int ErrorCodeFunction(int count)
{
    if (count < -1) return 0;
    return count > 100 ? 1 : 2;
}

int CallErrorCodeFunction(int count)
{
    int r= ErrorCodeFunction(count);
    if (r == 0)
    {
        return 0;
    }
    else
        return r;
}

int ThrowFunction(int count) {
    if (count < -1) throw 1;
    return count > 100 ? 1 : 2;
}

int CallThrowFunction(int count)
{
    return ThrowFunction(count);
}

__declspec(noinline) int TestErrorCode(int result, int count)
{
    CallErrorCodeFunction(count);
    return result + 1;
}

__declspec(noinline) int TestThrow(int result, int count)
{
    try {
        ThrowFunction(count);

        return result + 1;
    }
    catch (...) {}
}

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD dwTimeStart, dwTimeEnd;

    int count = 100 * 1000 * 1000;

    int result=100;
    dwTimeStart = GetTickCount();
    for (int i = 0; i < count; i++)
    {
        result = TestErrorCode(result, count);
    }
    dwTimeEnd = GetTickCount();

    printf("Error code time = %d\n", dwTimeEnd - dwTimeStart);

    dwTimeStart = GetTickCount();
    for (int i = 0; i < count; i++)
    {
        result = TestThrow(result, count);
    }
    dwTimeEnd = GetTickCount();

    printf("Try catch time = %d\n", dwTimeEnd - dwTimeStart);

    return 0;
}


Тогда расклад:
Error code time = 125
Try catch time = 141

Debug: для 10*1000*1000
Error code time = 687
Try catch time = 469

VS2015Update3
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.