===== Подробности кода GCC Ada ===== В [[gamma-ada | примере с множественным наследованием]] компилятор порождает следующие функции: | pkg_alignment | возвращает "4" - выравнивание для Alpha | | pkg_alignment_2 | возвращает "4" - не используется | | pkg_alignment_3 | возвращает "4" - выравнивание для Gamma | | pkg__T548s | переходник к pkg_alignment_3 для Gamma | | pkg_size | возвращает "64" - размер для Alpha | | pkg_size_2 | возвращает "32" - не используется | | pkg_size_3 | возвращает "128" - размер для Gamma | | pkg_T539s | переходник к pkg_size_3 для Gamma | | pkg_Oeq | сравнение для Alpha | | pkg_Oeq_2 | не используется | | pkg_Oeq_3 | сравнение для Gamma | | pkg_T557s | переходник к pkg_Oeq_3 для Gamma | | pkg_assign | присваивание для Alpha | | pkg_assign_2 | не используется | | pkg_assign_3 | присваивание для Gamma | | pkg_T566s | переходник к pkg_assign_3 для Gamma | | pkg_elabs | инициализация таблиц-диспетчеров и описателей типа | | pkg_alphaIP | не используется | | pkg_betaIP | не используется | | pkg_gammaIP | не используется | Переменные в сегменте .data: | pkg_alphaP | 4 байта | адрес pkg_alphaT + 12 | | pkg_betaP | 4 байта | адрес pkg_betaT + 12 | | pkg_gammaP | 4 байта | адрес pkg_gammaT + 12 | | pkg_pkg_gamma0P | 4 байта | адрес pkg_T281s + 12 | | pkg_alphaF | 1 байт | значение 01h | | pkg_betaF | 1 байт | значение 01h | | pkg_gammaF | 1 байт | значение 01h | | pkg_alphaE | 13 байт | строка "PKG.ALPHA" | | pkg_betaE | 13 байт | строка "PKG.BETA" | | pkg_gammaE | 13 байт | строка "PKG.GAMMA" | | pkg_E | 1 байт | строка "" (пустая) | Переменные в сегменте .bss: | pkg_alphaT | 76 байт | | pkg_betaT | 16 байт | | pkg_gammaT | 84 байт | | pkg_T281s | 76 байт | | pkg_alphaB | 44 байта | | pkg_betaB | 40 байт | | pkg_gammaB | 52 байт | | pkg_T282s | 12 байт | Здесь: | F | флаг необходимости регистрации тэгового типа | | E | внешнее имя типа | | T | таблица-диспетчер (Dispatch Table) | | B | описатель типа (Type Specific Data) | | P | указатель на таблицу-диспетчер (тэг) |