По причине крайней неосведемленности и беспробудной тупости - рубрика научпоп.
Почему при добавлении вирутальной функции генерируется меньше кода?
Потому что компилятор помещает vtable в единицу трансляции где объявлен первый виртуальный метод. Если не объявлено ни одного, он вынужен помещать vtable в каждый юнит. Потом линкер смержит дубликаты.
А вы знали? Какие еще интересные, но малоизвестные факты вы знаете?