If I call a virtual function 1000 times in a loop, will I suffer from the vtable lookup overhead 1000 times or only once?
If the compiler can deduce that the object on which you're calling the virtual function doesn't change, then, in theory, it should be able to hoist the vtable lookup out of the loop.
Whether your particular compiler actually does this is something you can only find out by looking at the assembly code it produces.