170 похожих чатов

Ребят, а как реализовано наследование в большинстве компиляторов? Есть такой линк,

но там многовато читать...
https://itanium-cxx-abi.github.io/cxx-abi/abi.html

Если говорить про виртуальные функции, то через virtual table, а наследование?
Можете, несколько терминов накинуть?

43 ответов

26 просмотров

Объект базового класса вкладывается в объект производного

класс базовый в начало кладется, потом производные

посмотри на степике курс про множественное наследование, там хорошо рассказывается или лекцию от CSC / владимирова

Это как раз в стандарте описано, а не в ABI

http://eel.is/c++draft/class.derived#general-3

Gleb-Pylypets Автор вопроса
Liber Azerate
Это как раз в стандарте описано, а не в ABI

Ааа, то есть стандартом определена реализация?

Gleb Pylypets
Ааа, то есть стандартом определена реализация?

Не то, как размещается в памяти, но то, как устроено, да

Gleb-Pylypets Автор вопроса
Yalokin Kononov
Он спросил как размещается в памяти

По-моему, нет. Это как раз зависит от ABI, опять же. То, что класс наследник содержит подобъект базового класса – не то, как оно размещается в памяти

Gleb Pylypets
Спс

у тебя есть кланг?

Gleb-Pylypets Автор вопроса
Yalokin Kononov
у тебя есть кланг?

Найти смогу, думаю

Yalokin Kononov
Он спросил как размещается в памяти

https://eel.is/c++draft/class.derived#general-3 https://eel.is/c++draft/class.derived#general-5

Gleb Pylypets
Спс

https://lms-vault.s3.amazonaws.com/private/1/courses/2020-autumn/spb-cpp-1/slides/cpp_1_lecture_101120.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAUKOEY5ZX6VXK3RWN%2F20210413%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20210413T113944Z&X-Amz-Expires=10&X-Amz-SignedHeaders=host&X-Amz-Signature=5f3736612e4a9c63d794c064ddedb701398c82778e923f007e0071b0bd5294c6 глянь эту презентацию, тут есть флажок кланга как вывести layout класса и в целом все лейауты перечислены, можно пощупать самому

Gleb Pylypets
Ааа, то есть стандартом определена реализация?

стандарт в целом определяет лишь семантику языковых конструкций и требуемое наблюдаемое поведение корректной программы. это справедливо и для нашего случая тоже

Gleb-Pylypets Автор вопроса
Gleb Pylypets
Спасибо, почитаю

Но это может быть специфицировано: https://eel.is/c++draft/class.base.init#1

class A : public B так и реализовано

Yalokin Kononov
класс базовый в начало кладется, потом производные

На счёт "начала" я бы не надеялся... Да и где там в классе начало-то?

Liber Azerate
Но это может быть специфицировано: https://eel.is/...

что именно специфицируется, кроме непосредственно инициализаторов?

Vlad
что именно специфицируется, кроме непосредственно ...

Порядок, в котором аллоцируются подобъекты базовых классов

Liber Azerate
Порядок, в котором аллоцируются подобъекты базовых...

так вы же сами привели https://eel.is/c++draft/class.derived#general-5

Vlad
так вы же сами привели https://eel.is/c++draft/cla...

Да, я перепутал инициализацию и аллокацию

Gleb-Pylypets Автор вопроса
Ilya Zviagin
class A : public B так и реализовано

сложное пояснение Например, в пайтоне используется C3-линеаризация и через неё будет поиск имени нужного. Иными словами вопрос в том, как идёт поиск метода, переменной и т.д., если она не в этом классе, как расположены в памяти, что делает кастование на уровне этого расположения... Ну по С++ скинули выше, почитаю

Ilya Zviagin
На счёт "начала" я бы не надеялся... Да и где там ...

Ну это деталь реализации, но кланг такой лэйоут выдает. Начало согласен, понятие не очень: // main.cpp struct A { int a; }; struct B { int b; }; struct C : public A, public B { int c; }; int main() { C c; } clang -Xclang -fdump-record-layouts -c main.cpp Выдает следующее: Dumping AST Record Layout 0 | struct C 0 | struct A (base) 0 | int a 4 | struct B (base) 4 | int b 8 | int c | [sizeof=12, dsize=12, align=4, | nvsize=12, nvalign=4]

Gleb Pylypets
сложное пояснение Например, в пайтоне используетс...

Кастование в каком-то смысле сдвигает указатель куда нужно, а про порядок и C3-линеаризацию, в плюсах другой механизм, можешь посмотреть ту лекцию, что я скинул или почитать что скинул либер, там тоже довольно понятно все

Gleb Pylypets
сложное пояснение Например, в пайтоне используетс...

Интересует как ищутся методы базового класса?

Gleb-Pylypets Автор вопроса
Liber Azerate
Интересует как ищутся методы базового класса?

Ну да, как наследование работает internally.

Gleb Pylypets
сложное пояснение Например, в пайтоне используетс...

вы спрашиваете сразу про все, но вот раздел, который покроет часть ваших вопросов http://eel.is/c++draft/class.member.lookup

Serhii Herashchenko
через vtable

Это если про виртуальные функции

Gleb-Pylypets Автор вопроса
Vlad
вы спрашиваете сразу про все, но вот раздел, котор...

Ну да, хочу изучить вопрос, который звучит примерно так - "расскажите про реализацию наследования в большинстве компиляторов"😃

Gleb Pylypets
Ну да, хочу изучить вопрос, который звучит примерн...

Ну это всё же описывает стандарт. То, как лежат подобъекты базовых классов в памяти, – несущественно

Gleb Pylypets
Ну да, хочу изучить вопрос, который звучит примерн...

1) Правда же линеаризация нужна только при множественном наследовании? 2) правда же она нужна только если такой лукап не является ошибкой компиляции?

Liber Azerate
Ну это всё же описывает стандарт. То, как лежат по...

ну такое, при виртуальном наследовании там весьма хитрей лейоут и по-другому даже вроде как не сделать

Gleb Pylypets
++

вам нужен стандарт и все, что выше (cppref). исходники компиляторов не очень помогут

Aidar Fattakhov
1) Правда же линеаризация нужна только при множест...

В си++ является поэтому в вопросе нет смысла

Похожие вопросы

Обсуждают сегодня

Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
Добрый день подскажите пожалуйста может кто то сталкивался с ошибками Sentry 22.10.0 развернутым из helm чарт в Kubernetes? Изначально 3 дня назад очень стало много событий ух...
Tire4 Finist Devops
1
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
22
почому оно не работает?
Vi Chapmann ٩( 💢•̀ з•́)و Chapmann
19
Карта сайта