Возник небольшой вопрос про таблицу виртуальных функций.
Насколько я понял, в таблице виртуальных функций содержаться указатели на функцию. Т.е. размер vtable будет зависеть от количества виртуальных функций в базовом классе. В связи с этим возникает небольшой вопрос.
Есть такой вот базовый класс
Код
class BaseClass
{
public:
// Перемещение по меню
uint8_t getListValue(uint8_t Value,uint8_t MaxValue);
const char * MenuName; //Имя пункта меню
BaseClass * returnItem; //Указатель на меню возврата
BaseClass ** forwardItem; //Указатель на меню перехода
virtual void showMenu() = 0;
virtual void showMenuItems() = 0;
virtual void checkPushButtons() = 0;
BaseClass()
: returnItem (0), forwardItem (0)
{};
virtual ~BaseClass() {};
};
Т.е. имеется 3 виртуальных функции плюс деструктор, ожидаю что размер vtable будет около 8 байт (1 указатель - 2 байта, всего 4 функции), но в результате получаю такой вот результат (вывод команды "avr-nm -n -C --print-size Project.elf" )
Цитата
00800157 0000000e V vtable for Menu::EndItem
00800165 0000000e V vtable for Menu::InterItem
00800173 0000000e V vtable for Menu::GlobalItem
00800181 0000000e V vtable for Menu::BaseClass
EndItem, InterItem и GlobalItem наследуют BaseClass.
Размер vtable получился 0x0E - 14 байт, .т.е немного больше чем ожидалось. От куда взялись "лишние" байты?
Заранее спасибо!