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

Статья Storage Layout of Polymorphic Objects

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

via Code_Analysis

11 комментариев:

  1. Анонимный21/11/12 09:36

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

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

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

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

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

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

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

    ОтветитьУдалить
  6. NULL_PTR, спасибо, прочитал, приятно. Alena, тоже спасибо.

    ОтветитьУдалить
  7. Анонимный23/11/12 03:22

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

    ОтветитьУдалить
  8. Анонимный18/12/12 16:25

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

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

    ОтветитьУдалить
  9. Студент-гопарь14/2/13 16:56

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

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

    ОтветитьУдалить
  11. Анонимный4/10/15 21:20

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

    ОтветитьУдалить