Для тех реализаций компилятора, которые используют vtables: существуют ли случаи, когда таблицы виртуальных функций изменяются во время выполнения? Или vtables только заполняется во время компиляции, и никаких действий не выполняется для их изменения во время выполнения?Изменения Vtable во время выполнения
ответ
Я не знаю ни одного C++ ABI с реализацией полиморфизма, который использует виртуальные таблицы, изменяющиеся во время выполнения.
Это было бы не очень полезно, так как виртуальные таблицы обычно описывают свойство кода (отношение функций-членов друг к другу по отношению к позиции w.r.t в иерархии классов), а код C++ не изменяется во время выполнения.
И поскольку это было бы не полезно, это было бы расточительно.
Включены ли vtables в раздел кода или раздел данных в неизменяемом изображении? –
@KarolisM ilieška: В соответствии с этой реализацией? И почему вам нужно знать? –
Конкретно: ARM Keil, но это также относится к руке gcc. 1. Я просто currious, 2. Я работаю со встроенными системами, и иногда необходимо знать, где разместить некоторые разделы. –
Короткий ответ - нет.
Несколько более длинный (и, вероятно, специфичный для реализации) ответ заключается в том, что указатель объекта на фактический vtable изменяется во время выполнения конструктора и деструктора производного полиморфного класса, так что переопределенные методы в производном классе не выполняются конструктором/деструктором базового класса, в то время как производный класс еще не построен/был разрушен.
Если вы хотите объекты, чтобы изменить класс во время выполнения, то у вас есть несколько вариантов:
Objective-C (++)
ручной код собственный механизм доставки
python/javascript etc al.
(лучший вариант) пересмотреть ваш дизайн.
Это не изменение vtable. Это элемент vptr уничтоженного объекта! –
также, 'std :: function' можно переустановить во время выполнения, так что это еще один вариант –
@KerrekSB исправлен, хотя я уверен, что есть лучшая формулировка –
- 1. Изменения во время выполнения
- 2. Изменения CCSprite изображения во время выполнения
- 3. Изменения DataTemplate TextBlock Свойства во время выполнения
- 4. Xamarin.Forms - Высота изменения ListView во время выполнения
- 5. Изменения атрибуты :: Роли лосей во время выполнения
- 6. Предотвращение изменения пользовательского контроля во время выполнения
- 7. Изменения местоположения StackPanel во время выполнения
- 8. Граница изменения размера WPF во время выполнения
- 9. Изменения SqlDataSource.SelectCommand во время выполнения перерывов PAGINATION
- 10. AbstractRoutingDataSource карта изменения во время выполнения
- 11. Grails conversionPattern изменения во время выполнения
- 12. Изменения формы сплошного цвета во время выполнения
- 13. Свойства изменения флагов Flex во время выполнения
- 14. изменения JTable модель во время выполнения
- 15. Выполнение изменения метода во время выполнения (Java)
- 16. изменения атрибут стиля во время выполнения
- 17. CultureInfo.CurrentCulture оленью кожу изменения во время выполнения
- 18. Изменения во время выполнения на интерфейс маркеров
- 19. Значения изменения Selenium ide во время выполнения
- 20. Ada Изменения адреса переменного во время выполнения
- 21. изменения атрибута MetadataType ViewModel во время выполнения
- 22. setInterval (функция(), время) время изменения во время выполнения
- 23. Изменение кода во время выполнения
- 24. Неполиморфные контейнеры во время выполнения
- 25. Точные изменения во времени выполнения
- 26. Files.readAllLines() Время выполнения Изменения
- 27. Прерывание во время исполнения во время выполнения
- 28. создание столбца во время выполнения во время выполнения sql-запроса
- 29. Изменения во время запуска задачи
- 30. Изменение Hashcode во время выполнения
Какие модификации среды выполнения вы предполагаете полезными/возможными? –
@ Cheersandhth.-Alf, если это простая программа на C++, чем нет, это глупо. но если он (сейчас или в будущем) должен будет написать что-то вроде VM или компилятора Interperter/JIT, я бы не отказался от его вопроса так быстро. –
Это очень сложно придумать такой дизайн, который поточно-безопасный, так что это не сделано. –