Ответ 1
Компилятор должен выпустить vtable для классов с виртуальными методами. Это содержит указатели на эти методы. Если все виртуальные методы являются встроенными (определены в заголовке), то компилятор не знает, какую единицу перевода (файл .cpp) испускает vtable внутри, поэтому он испускает копию во всех из них, и компоновщик получает дело с этим. Это делает дополнительную работу и раздувание в объектных файлах. Если, с другой стороны, виртуальная функция определена вне линии (в .cpp), vtable может быть испущена там, и, таким образом, будет выпущена только одна копия. То же самое относится к RTTI.