C-подобная обработка обратного вызова: какой алгоритм выполняется быстрее?

У меня есть массив таких обратных вызовов void (* callbacks [n]) (void * sender) , и мне интересно, какой из этих кодов будет выполняться быстрее:

//Method A
void nullcallback(void* sender){};

void callbacka(void* sender) 
{
    printf("Hello ");
}

void callbackb(void* sender)
{
    printf("world\n");
}

int main()
{
    void (*callbacks[5])(void* sender);
    unsigned i;
    for (i=0;i<5;++i)
        callbacks[i] = nullcallback;
    callbacks[2] = callbacka;
    callbacks[4] = callbackb;
    for (i=0;i<5;++i)
        callbacks[i](NULL);
};

или

//Method B
void callbacka(void* sender) 
{
    printf("Hello ");
}

void callbackb(void* sender)
{
    printf("world\n");
}

int main()
{
    void (*callbacks[5])(void* sender);
    unsigned i;
    for (i=0;i<5;++i)
        callbacks[i] = NULL;
    callbacks[2] = callbacka;
    callbacks[4] = callbackb;
    for (i=0;i<5;++i)
        if (callbacks[i])
            callbacks[i](NULL);
};

некоторые условия:

  • Имеет ли значение, знаю ли я, что большинство моих обратных вызовов действительны или нет?
  • Имеет ли значение, компилирую ли я свой код с помощью компилятора C или C ++?
  • Изменяет ли целевая платформа (windows, linux, mac, iOS, android) что-нибудь в результатах? (вся причина этого массива обратных вызовов состоит в том, чтобы управлять обратными вызовами в игре)
0
задан Ali1S232 20 August 2011 в 04:41
поделиться