среда, ноября 21, 2012

Статья Storage Layout of Polymorphic Objects

Начинающим С++ программистам часто бывает непонятно каким образом и где хранятся виртуальные функции. Статья Storage Layout of Polymorphic Objects рассказ в картинках о том, как будут размещены поля и виртуальные функции объекта, рекомендую.

via Code_Analysis

11 коммент.:

Анонимный комментирует...

Не хватает еще одного рисунка - для подкласса, в котором некоторые виртуальные функции не замещены. В таблице, соответственно, будут указатели как на функции подкласса (замещенные), так и на функции базового класса (просто копия указателей из таблицы базового класса).

Jakobz комментирует...

Тема множественного наследования не раскрыта.

migmit комментирует...

Jakobz, именно. Тривиальности разобраны, а "мяса" нет.

NULL_PTR комментирует...

Более глубокое описание есть в статье "C++: Under the Hood" от одного из разработчиков компилятора Visual C++:
http://www.openrce.org/articles/files/jangrayhood.pdf

В ней разбирается всё что можно: виртуальное наследование, множественное наследование, shadowing виртуальный функций, преобразование указателей со сдвигами, как происходит доступ к данным, обработка исключений и прочее.

Alena комментирует...

migmit
Тривиальности разобраны, а "мяса" нет.

Больше мяса можно найти в книге Липпмана Inside the C++ Object Model

migmit комментирует...

NULL_PTR, спасибо, прочитал, приятно. Alena, тоже спасибо.

Анонимный комментирует...

Очень полезна для понимания вопроса недавняя публикация Страуструпа сотоварищи. Там и про множественное наследование, и про RTTI. И можно сделать интересные выводы: например, множественное наследование в сочетании с RTTI легко приводит к экспоненциальному росту количества vtables.

Анонимный комментирует...

Вот в этой статье Страуструпа тоже неплохо описано.

Multiple Inheritance For C++
http://static.usenix.org/publications/compsystems/1989/fall_stroustrup.pdf

Студент-гопарь комментирует...

Убогая статья, всего мало, мне, как жалкому студенту, непонятно, как и где функции действительно хранятся - в виде чего, в каком виде (статическая память, куча, динамическая, или еще какая нибудь плюсовая магия)

Unknown комментирует...

Здесь подробно рассказано о виртуальных функциях
https://web-ide.ru/j/easyblog-2/entry/8-virtualnye-funktsii-nizkourovnevyj-vzglyad

Анонимный комментирует...

Тема совершенно не раскрыта(