|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.10.2018, 21:34 | #1 |
Пользователь
Регистрация: 11.01.2018
Сообщений: 49
|
Сколько памяти занимает VMT?
Здравствуйте, искал информацию про то, сколько памяти занимает таблица виртуальных методов и наткнулся на такую фразу:"...размер объекта складывается из размера полей + (размер указателя) * (количество указателей на таблицы виртуальных функций если они есть) + может быть добавлено выравнивание.".
Я не понимаю, как можно добиться того, чтобы в одном объекте было несколько таблиц виртуальных методов. Я пробовал создать абстрактный класс и создать его класс-наследник, в котором я объявил независимый от родителя виртуальный метод. Ожидал увидеть, что класс-наследник будет занимать больше памяти, чем абстрактный, потому что в моём понимании создалось 2 vmt (одна от родителя, вторая в самом классе). Экспериментировал по-разному, создавал иерархию, желаемого результата не получил, все классы и их объекты (динамически объекты не создавал) весили одинаково. Как же можно убедиться в этом: "... + (размер указателя) * (количество указателей на таблицы виртуальных функций если они есть)..." Может я неправильно понял принцип? Подскажите, пожалуйста. |
03.10.2018, 22:56 | #2 |
Новичок
Джуниор
Регистрация: 21.04.2017
Сообщений: 2
|
|
04.10.2018, 00:24 | #3 |
Пользователь
Регистрация: 11.01.2018
Сообщений: 49
|
То есть при создании экземпляра класса-наследника, в нём создаётся одна таблица виртуальных методов с виртуальными функциями родителя и своими виртуальными функциями? Тогда я вообще не представляю как в объекте может быть несколько указателей на vmt...
|
04.10.2018, 00:46 | #4 | |
Новичок
Джуниор
Регистрация: 21.04.2017
Сообщений: 2
|
Цитата:
Множественное наследование, например. Последний раз редактировалось nimazzzy; 04.10.2018 в 00:50. |
|
04.10.2018, 20:03 | #5 | |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,834
|
Цитата:
Сама VMT хранится где-то отдельно в сегменте кода, довольно часто VMT укладывают друг за другом в начале секции .text модуля PE (видно при визуальном просмотре). Как уже говорили, это внутренняя кухня компилятора, всё зависит от него. Типовая VMT чаще всего состоит из полей InstanceSize, AncestorVMTPtr, затем идут ссылки на сами методы, то есть ее размер вычисляется по формуле: Код:
В разработке: воспроизводственный контур ИТ
|
|
04.10.2018, 20:34 | #6 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,343
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[Assembler] Matrix rd H*W*4 ; выделение памяти под матрицу (строки идут друг за другом) rd - это сколько памяти выделяется? | Дмитрийййй | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 11 | 10.10.2018 12:13 |
узнать, сколько памяти занимает класс | BLACK_RAIN | Общие вопросы Delphi | 5 | 03.07.2017 15:15 |
webbrowser при обновлении страницы занимает больше оперативной памяти | КатяСаша | Общие вопросы Delphi | 10 | 01.11.2016 18:44 |
Определить, сколько места занимает программа в памяти | kolian87 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 7 | 26.01.2015 07:47 |
Количество оперативной памяти которое занимает программа | werser | Помощь студентам | 1 | 03.02.2008 02:22 |