По объектным файлам: разве это не те файлы, которые содержат исполняемый код, но не имеют "обёртки" (сиречь заголовка)? Потому как exe от dll по идее не сильно отличаестя, точнее отличается тем, что exe функций не экспортирует.Сообщение от Vitamin
По объектным файлам: разве это не те файлы, которые содержат исполняемый код, но не имеют "обёртки" (сиречь заголовка)? Потому как exe от dll по идее не сильно отличаестя, точнее отличается тем, что exe функций не экспортирует.Сообщение от Vitamin
Хмм я ж выложил. ты не читаешь, да?Сообщение от Vitamin
Кому вопросы задавал?
Я за 2й пункт. Наконец то конструктивный разговор прорисовывается.
Но никто не мешает Си написать для пункта 1.
Конструктивно ты не хотел разговаривать - я выкладывал, искал, пытался услышать вопросы. Ничего не было. Есть вопросы - задавай. Могу скинуть на мыло 10мб исходников святая-святых exec.library (единственная либла написаная в асме, а не в си). Также около 30 мб rom kernel manuals - будет желание проштудировать и понять всю систему из нутри? =)
Последний раз редактировалось acidrain; 12.10.2006 в 20:00.
И такой ужас ДЛЯ КАЖДОЙ функции?..Сообщение от elf/2
На амиге сделано оптимальным образом - для вызова функции достаточно знать, в какой из jmp в таблице вызовов надо попасть (а не извлекать смещение для каждой функции отдельно), и вдобавок базовый адрес (где эта таблица вызовов, то есть). Как я думаю, проблема с пц в том, что целый регистр отдать под базовый при вызове через таблицу jmp - непозволительная роскошь для убогой х86 архитектуры.
Из простого факта - развитие есть добавление новых фич и возможностей. Ибо наоборот, намеренное массовое убирание фич и возможностей - какой-то дестрой просто. Оптимизации разные и убирание мелочей - глобального уменьшения размера не обеспечивают.Сообщение от ng_dead
Обычно все нормальные программисты на Спектруме подразумевают, что у них в запасе вполне определённый объём памяти, который можно выяснить на этапе компиляции программы, например. А если эти так называемые библиотеки будут иметь непредсказуемый размер?А что гадать то? Не надо гадать. В самом примитивном случае, строится табличка распределения памяти между библиотеками...
По идее да, например на линухе результат сборки (объектный файл или разделяемая библиотека) зависит от ключей компилятора (если не собирается программа с main(int argc, char const * argv[])) В винде же надо еще прописывать дополнительные спецификаторы в заголовках, в зависимости от того импортируется или экспортируется функция.Сообщение от icebear
В смысле за динамическую компоновку? При условии отсутствия ОС применимо только в плагинной системе...Сообщение от acidrain
Ну на первые же две ссылки с сайта nedopc я задавал вопросы- не на все из них получил ответы. По поводу остальных ссылок- рекомендации по программированию на амиге. Без знания ее ассемблера туда лезть малополезно, в содержании того цикла статей ничего интересного для себя не нашел.Сообщение от acidrain
Нафиг (почему- см. выше). В такой ситуации ближе С. А еще полезнее- внятная дока по формату (вроде есть где-то у меня). Потому как по сырому примеру мало что поймешьСообщение от acidrain
Смотрим внимательнее на тот исходник. Вызов функции (многократный) там занимает одну строчку. Все остальное- подготовка библиотеки и ее освобождение. Это однократно выполняемая последовательность.Сообщение от yoko_ono
Данный подход (принудительная загрузка библиотеки и получение адреса функции) применяется только при организации плагинной системы- получаем список плагинов, подключаем нужный когда надо, получаем из него адреса нужных функций, работаем с ними, освобождаем плагин. (При использовании ООП (современный подход) из плагина выковыривается одна-единственная функция- фабрика классов, которая производит экземпляры плагинно-зависимых классов, вызов функций которых происходит с помощью механизма полиморфизма).
Если имена модулей известны на этапе компиляции, то можно заставить компилятор генерировать специальный код, подключающий библиотеку при старте программы. При этом работа с ее функциями ведется совершенно прозрачно для программиста.
Последний раз редактировалось Vitamin; 12.10.2006 в 20:22.
Чего ты сразу с терминологии не начал? без моей помощи не мог разобраться что как называется? темболее ниже пишешь, что твое творение ни под один пункт не подходит, тогда что ты придумал?Сообщение от Vitamin
Ты опубликовал свою идею для получения одобрения или посоветоваться - вот мой совет: не пытайтесь усложнить ищите более простые пути решения. ИМХО АОС для этих целей (подражание) подходит куда лучше, чем винда или линух.
Есть вообще готовое - Шаос либман. Бери, юзай! Развивай! Не изобретай велик!
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
я и так много нафлеймил, но тут простите - цитату в студию! что ты спрашивал? про второй вид либл - читай недопц форум, или его мне тоже наддо переписать?Сообщение от acidrain
А по первой - читай сайт шаоса, я не буду за тебя думать! не проси =)))
аргументируй !При условии отсутствия ОС применимо только в плагинной системе...
А если несколько ф-ций из одной либлы вызвать, при чем один вызов в либле 1, другой в либле2, затем 4, затем 1 - как быть в таком случае?Смотрим внимательнее на тот исходник. Вызов функции (многократный) там занимает одну строчку. Все остальное- подготовка библиотеки и ее освобождение. Это однократно выполняемая последовательность.
До этого ты писал, что спасибо за инфу, она так полезна. Теперь ты пишешь, что я ничче и не писал вовсе? И народу то сколько налетело амижного? Я и неизвестно откуда прошаренная йака_ини. А теперь посчитай скоко народу пцшного напало на меня?А тут налетел народ и давай расхваливать амигу (притом чисто на словах, безо всякой полезной для меня информации)
Последний раз редактировалось acidrain; 12.10.2006 в 20:54.
По поводу таблиц релокации. Мне интересно знать их устройство. Есть доки? В исходниках ковыряться ресурсоемкоСообщение от acidrain
Пожалуйста. Для загрузки библиотеки по требованию необходим некий менеджер этих библиотек, а также менеджер памяти для распределения ресурса. Поскольку у нас нет ОС, то ясно, что эти менеджеры программа вынуждена таскать с собой. Все библиотеки подключаются один раз и ни разу не отключаются (в таком случае менеджер получается "одноразовый") Если это не так, то получаем плагинную систему (то, о чем я и говорил).Сообщение от acidrain
По сути, я предлагаю именно такую систему, но с некоторыми принципиальными отличиями:
-приложение ничего само не подключает, все делает загрузчик
-расположение библиотек не фиксированно, а выбирается сообразно обстоятельствам (в простейшем случае, одна за одной в памяти)
-керналя нет, при линковке подставляются непосредственные адреса вызова.
Если имена либ неизвестны на этапе компиляции, то открываем необходимое число библиотек, достаем из них указатели на функции и вызываем по этим указателям нужное число раз. Если имена известны, то этими всеми операциями (открытие-получение адреса-закрытие) обычно заведует ОССообщение от acidrain
Последний раз редактировалось Vitamin; 12.10.2006 в 21:05.
Итак, попробуем сформулировать основные принципы амижной реализации:
1. Импорт по номеру (ординалу) функции.
2. Использование dynamic binding вместо dynamic linking.
Недостаток первого пункта - отсутствие возможности контроля целостности во время загрузки.
Второй пункт означает что библиотеку можно рассматривать как ООП класс (и объект singleton) и функции вызываются как "виртуальные функции". Недостаток - перерасход ресурсов во время выполнения. Даже на Мотороле, где косвеный вызов по таблице адресов делается одной командой, необходим регистр (весьма ценный ресурс). А если надо будет вперемешку вызывать функции из разных библиотек? На Z80 понадобится гораздо больше машинных команд только для того, чтобы передать управление в библиотеку, и, в зависимости от реализации, некоторые регистры могут оказаться недоступными для передачи аргументов. При таком раскладе, считаю, рассказы о "каматозе динамической компоновки" мoжно отбросить.
В этом аспекте считаю подход Амиги (и Линукса) более правильным.Сообщение от icebear
Так называемые "thread-safe libraries".
Именно потому, что завязаны на floppy, динамическая компоновка может помочь.Сообщение от elf/2
Чем больше времени мы сможем хранить библиотеки в памяти и прикомпоновывать их к разным программам, тем больше ресурсов floppy может быть сэкономлено.
Cовершенно примитивное. Каждый 'exe' - после загрузки в память представляет из себя некоторое кол-во секций, с кодами, с данными и т.д. Если в секции есть абсолютные адреса со ссылками на к.-л. секцию - то в самом файле ставится относительное смещение от начала этой секции, а в таблице релокации для данной секции - смещение до адреса, который надо подкорректировать и номер секции, в которую он должен указывать. Плюс вариации с 16-32 битными смещениями. Вот и всё.Сообщение от Vitamin
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)