Polling for an external pulse - logic question

The problem with the external interrupt is the extra code generated.

Unlike the pin change interrupt, which directly goes to your own function the external interrupts (when you use attachInterrupt) "helpfully" slow you down like this:

SIGNAL(INT0_vect) {
  if(intFunc[EXTERNAL_INT_2])
    intFunc[EXTERNAL_INT_2]();
}

So it does an "if" to see if you declared an interrupt handler, and if so, calls it. And since the compiler can't know what registers that function (which is supplied at runtime) uses, it has to push and pop the lot. So between the test, the array lookup, and extra function call, and all the extra register pushing, it's somewhat slower.