Альтернативные реализации вызова виртуальных функций
В C динамическое связывание осуществляется посредством виртуального механизма. Хотя стандарт определяет ожидаемое поведение вызовов виртуальных функций, конкретная реализация варьируется в зависимости от компилятора. Механизм виртуальной таблицы и виртуального указателя широко используется такими компиляторами, как G и Microsoft Visual Studio.
Альтернативные реализации
Несмотря на преобладание подхода с использованием виртуальных таблиц, другие реализации динамической диспетчеризации для виртуальных функций существуют. Одна известная альтернатива предполагает использование указателя внутри объекта вместо виртуального указателя. Эта стратегия позволяет более эффективно обрабатывать сложные объекты с несколькими базами и массивами, поскольку для всех объектов в массиве требуется только одна запись в таблице сопоставления.
Размер объекта и виртуальные функции
Утверждение о том, что размер класса с виртуальной функцией всегда будет равен размеру указателя (виртуального указателя), не является универсально верным. Фактическая реализация диспетчеризации виртуальной функции может влиять на размер объекта. Например, в альтернативной реализации, упомянутой выше, размер объекта с виртуальной функцией может превышать размер указателя из-за дополнительного хранилища, необходимого для указателя внутри объекта.
Ограничения Виртуальные таблицы
Хотя виртуальные таблицы являются распространенным решением для динамической диспетчеризации, у них также есть ограничения. Например, их использование может привести к большим виртуальным таблицам и медленной инициализации объектов, особенно для сложных объектов-примесей с несколькими базами. Это последствие вытекает из требования, чтобы тип подобъекта во время выполнения всегда был правильным, даже во время создания.
Альтернативные структуры данных
Один подход к преодолению этих проблем. Ограничением является использование альтернативных структур данных для хранения метаданных. Например, массивы Джуди использовались для создания высокоэффективного сопоставления адресов объектов и соответствующих им метаданных. Этот подход обеспечивает быстрый поиск и скромные требования к объему памяти.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3