richie 0 5 августа, 2008 Опубликовано 5 августа, 2008 · Жалоба Полезность разбиения на логические модули не обсуждается. Полезно и все. :) Еще полезно использовать системы отслеживания версий (VSS, Team Coherence и т.п.). А по поводу кейла и текста (модулей): 1. Если вдруг понадобится разместить массив констант по определнному адресу, то придется смотреть описание на кейл и переделывать исходный текст, чтобы это сделать. Подробно см. директиву линковщика "CO". Пример из реального проекта управляющей строки линковщика "?CO?tb_crc8(0FA00H)" - разместить объект tb_crc8 в памяти CODE по адресу 0xFA00. tb_crc8 - таблица предвычесленных значений tb_crc8[256]. 2. Если используешь .lib и необходимо заменить функцию в скомпилированной библиотеке, то библиотека должна быть скомпилирована так, чтобы заменяемая функция была в отдельном объектном модуле, т.е. отдельном .c-файле. Т.е. при сборке проекта с .lib, линковщик обнаружив функцию с таким же именем как и в библиотеке попытается ее заменить на вариант из проекта. Полезность разбиения на логические модули не обсуждается. Полезно и все. :) Еще полезно использовать системы отслеживания версий (VSS, Team Coherence и т.п.). А по поводу кейла и текста (модулей): 1. Если вдруг понадобится разместить массив констант по определнному адресу, то придется смотреть описание на кейл и переделывать исходный текст, чтобы это сделать. Подробно см. директиву линковщика "CO". Пример из реального проекта управляющей строки линковщика "?CO?tb_crc8(0FA00H)" - разместить объект tb_crc8 в памяти CODE по адресу 0xFA00. tb_crc8 - таблица предвычесленных значений tb_crc8[256]. 2. Если используешь .lib и необходимо заменить функцию в скомпилированной библиотеке, то библиотека должна быть скомпилирована так, чтобы заменяемая функция была в отдельном объектном модуле, т.е. отдельном .c-файле. Т.е. при сборке проекта с .lib, линковщик обнаружив функцию с таким же именем как и в библиотеке попытается ее заменить на вариант из проекта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 5 августа, 2008 Опубликовано 5 августа, 2008 · Жалоба Я уже как-то писал и ссылки давал. Современные компиляторы устроены еще более наворочено и, в частности, используется оптимизация кода на уровне линкера. Лично сталкивался с такими штуками еще в Borland C++ 5.5 Вывод очень простой - максимально полно задавать нужные тебе параметры и опции при компиляции проекта, а не полагаться не режимы "по умолчанию" и грамотно применять расширения языка типа inline, volatile и пр. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 5 августа, 2008 Опубликовано 5 августа, 2008 · Жалоба Если все в одном файле, и функции объявлены как static. Компилятор может сделать более эффективный код (например повставлять инлайнов там где это не указано явно, повыбрасывать неиспользуемые функции, заменить "дальний" вызов на "ближний" для процессоров где это актуально и .т.п.). С т.з. оптимизации компилятору лучше сразу видеть весь код в одном файле, потому что линкер ничего оптимизировать не будет. С gcc (не знаю просто, как с другими) можно при большом желании и на ёлку влезть, и всё такое прочее. Если указать в командной строке все .c файлы проекта сразу и добавить ключики -combine (объединить промежуточное представление всех файлов в одно целое) и -fwhole-program (и это объединение - вся программа), то он ведёт себя так, как якобы все функции этого общего представления статические, т.е. снаружи "этого всего" никому не нужны и проводит все эти оптимизации (выбрасывание ненужного, inline-подстановки используемого единственный раз либо достаточно мелкого). Для "окончательного релиза" это может и есть смысл делать. А вот замены вызовов на ближние делает как раз линкер, причём в том числе при линковке нескольких объектников и делает это в том числе со включенными из бибилиотек модулями. Ключ --relax Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kaplinsky 0 5 августа, 2008 Опубликовано 5 августа, 2008 · Жалоба Цена: 29 826 руб. :08: А я бы не советовал. За такие деньги? Нифига себе - оупен сорс! Разве уместен разговор о деньгах когда речь идет о проверенной информации ? П.С. пардон а Вы не подсчитывали сколько денег Вы потратили на интернет читая этот форум ? извиняюсь за офф. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Half 0 6 августа, 2008 Опубликовано 6 августа, 2008 · Жалоба Разве уместен разговор о деньгах когда речь идет о проверенной информации ? П.С. пардон а Вы не подсчитывали сколько денег Вы потратили на интернет читая этот форум ? извиняюсь за офф. У меня безлимитка 20 USD в месяц. Что позволяет копировать, в среднем, в месяц 300-400 электронных книг. Что значит "проверенная информация"? Это как рыба не первой свежести? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 17 6 августа, 2008 Опубликовано 6 августа, 2008 · Жалоба Что позволяет копировать, в среднем, в месяц 300-400 электронных книг. Лучше прочитать одну, чем скопировать 100. Причём читать удобнее бумагу. Я бы вот руководство по GCC с удовольствием купил, так не продают уже, ни за какие тысячи... А на компе есть, 2 версии, русская и аглицкая. Только толку-то мало. С экрана читать тяжело. Особенно после рабочего дня. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Half 0 6 августа, 2008 Опубликовано 6 августа, 2008 · Жалоба Только толку-то мало. С экрана читать тяжело. М-м... У вас нет принтера? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 6 августа, 2008 Опубликовано 6 августа, 2008 · Жалоба -fwhole-program (и это объединение - вся программа), то он ведёт себя так, как якобы все функции этого общего представления статические, т.е. снаружи "этого всего" никому не нужны и проводит все эти оптимизации Вот это зачОт! Спасибо, не знал о такой возможности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 6 августа, 2008 Опубликовано 6 августа, 2008 · Жалоба А ещё функции можно дать атрибут externally_visible и её будет видно снаружи даже при ключе -fwhole-program :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться