#c #layout #object
#c #макет #объект
Вопрос:
Стандарт стандартизирует детали реализации объекта? я слышал, что в некоторых компиляторах он отличается. Даже если это так, стоит ли проникать внутрь объектной модели c от Липпмана и как?
Ответ №1:
Я не могу говорить о книге, потому что я не читал ее лично, но это обычная рекомендация, так что это не повредит.
По состоянию на стандарт, он не предписывает конкретный макет объекта, а только накладывает ограничения на поведение программы, но понимание даже одной реализации поможет вам понять, что происходит под обложками. Для большинства вещей разные компиляторы используют схожие подходы.
В качестве примера, механизм диспетчеризации динамических функций не определен стандартом, только поведение, но все компиляторы реализуют его на основе таблиц виртуальных функций. Макет таблицы (т. Е. Как там организованы методы, какие дополнительные данные могут быть до / после таблицы) может отличаться, но проблема динамической отправки одна и та же, и решения достаточно похожи, чтобы понимание одного из них обычно помогало вам понять общую проблему.