User Tag List

Страница 7 из 7 ПерваяПервая ... 34567
Показано с 61 по 70 из 74

Тема: Осваиваем Hi-Tech C v3.09 для CP/M

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alcoholics Anonymous Посмотреть сообщение
    компиляторы начинаются с препятствия - они уже решили, что локальные переменные будут в стеке, и они будут проиндексированы с индексным регистром.
    Вот это, кстати, интересный момент.

    Немногие задумывались, почему большинство компиляторов (в том числе для x86 или ARM) размещают локальные переменные в стеке.

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

    Иногда компилятор может доказать, что та или иная функция не вызывает сама себя - ни прямо, ни через другие функции. Для таких функций он может отказаться от использования стека, а для прочих - нет. Вызов функции по указателю - это один из случаев, когда компилятор всегда должен подразумевать возможную рекурсию, ведь он не знает, что будет вызвано. Будет ли код, вызывающий функцию по указателю, вызван впоследствии рекурсивно.

    В этом смысле более эффективен Фортран, где рекурсия запрещена, и компиляторы имеют полную свободу оптимизации.

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

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    5,013
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    324
    Спасибо Благодарностей получено 
    332
    Поблагодарили
    254 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    А дело здесь в рекурсии.
    в повторной входимости (что касается не только рекурсии)
    Прихожу без разрешения, сею смерть и разрушение...

  4. #3

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    в повторной входимости (что касается не только рекурсии)
    А чем повторная входимость отличается от рекурсии?

  5. #4

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    А чем повторная входимость отличается от рекурсии?
    наверно рекурсия более узкое понятие

    а повторная входимоссть может быть и без рекурсии
    например функция вызываетсо несколькими потоками "одновременно"

    - - - Добавлено - - -

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Рекурсия иногда нужна, поэтому лучшим решением я бы считал введение атрибутов для функций, которые программист не собирается вызывать
    именно поэтому сяпаскали ущербное гуавно
    по дефолту прибито гвоздями то
    что обычно никогда не надо
    а то чего надо в упор нету....

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    как в GCC можно задать функциям атрибут, что они никогда не возвращаются.
    а нахрена нужны "особые" атрибуты для такой функции?
    как в проге может быть много не возвращаемых функций?
    чтоб этот атрибут на что то влиял

    в моем понимании невозвращаемая функция это типа mainloop-а
    и не представяю зачем их нужно больше чем100500 в проге

    это скорей затычка от детектора ошибки невозвращаемой функции
    Последний раз редактировалось NEO SPECTRUMAN; 20.06.2023 в 03:43.

  6. #5

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,733
    Спасибо Благодарностей отдано 
    2,735
    Спасибо Благодарностей получено 
    173
    Поблагодарили
    133 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Alcoholics Anonymous, Ваши сообщения на форуме всегда очень подробны и интересны. Благодарю!

  7. #6

    Регистрация
    16.12.2008
    Адрес
    Kharkov, Ukraina
    Сообщений
    2,221
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    18 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Alcoholics Anonymous, cпасибо. Очень полезные посты для понимания нюансов построения компиляторов для Z80.

    - - - Добавлено - - -

    z88dk уникальный проект, который рассчитан именно на Z80 платформу.
    Электроника КР-02, MSX YIS-503IIR, Орион-128, Ленинград-2, Pentagon-128k, MSX2 YIS-503IIIR, MSX-EXT, ...

  8. #7

    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,501
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    204
    Поблагодарили
    143 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    где бы раскопать процедурку printf? Получается .AS без печати.

  9. #8

    Регистрация
    23.12.2006
    Адрес
    Славный город Самара
    Сообщений
    484
    Спасибо Благодарностей отдано 
    138
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    12 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию ПРОБЛЕМА С ГЛОБАЛЬНЫМИ МЕТКАМИ

    Столкнулся с проблемой. Линкер иногда (?) не находит в библиотеке метки, которые используются из других модулей.
    Например, имеется модуль, в котором определена метка "udiv":
    Код:
    psect text
    global udiv
    udiv:
    ...
    В другом модуле имеется обращение к этой метке:
    Код:
    psect text
    global _foo
    _foo:
    ...
    call udiv
    ...
    Если мы используем в си-исходнике функцию "foo":
    Код:
    foo();
    то линкер запихнёт в выходной файл функцию "foo", но "udiv" не найдёт и вместо её адреса подставит в call нули.
    Хотя модуль такой есть в библиотеке, и метка "udiv" как глобальная определена.

    Кто-нибудь знает, как это побороть? А то, в общем-то, это ставит крест на компиляторе. Хотя на MSX его во всю юзают, и таких проблем, похоже, не испытывают.

    Для работы использую cpm.exe из командной строки под Win10-64.

    Код:
    cpm.exe link.com -I -Z ...
    Последний раз редактировалось Sergey; 11.06.2023 в 05:50.
    С уважением,
    Gris / Red Triangle.
    _____________________________________
    ZX-EVO/TS-Labs config/NGS/HDD/SD-card
    Amiga A1200/Blizzard 1230@50/32/60GB
    Amiga A1200/Apollo 1260@66/32/60GB
    UnAmiga (C5) AGA GM7123 VideoDAC

Страница 7 из 7 ПерваяПервая ... 34567

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Осваиваем микрокомпьютер (1 и 2 ч.)
    от kas29 в разделе Пресса
    Ответов: 2
    Последнее: 06.02.2020, 01:27
  2. Видеоподкаст: "Old Gold Tech"
    от unbeliever в разделе Разный софт
    Ответов: 1
    Последнее: 12.06.2010, 13:41

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •