|
Как лучше писать |
|
|
|
Aug 5 2008, 06:42
|
Группа: Участник
Сообщений: 10
Регистрация: 4-05-08
Пользователь №: 37 271

|
Keil mVision.Соответственно, есть куча разных функций.Одни для одного,другие для другого, где то они пересекаюся и не редко.В общем, как обычно.Вот вопрос-стоит ли собирать их в разные си файлы и делать кучу extern-ов, или лучше все-таки без особой необходимости этого не делать.Может, надо искать золотую середину?Есть ли какие-нибудь критерии,кроме здравого смысла? На что это влияет?Спасибо
|
|
|
|
|
 |
Ответов
|
Aug 5 2008, 07:22
|
Группа: Участник
Сообщений: 10
Регистрация: 4-05-08
Пользователь №: 37 271

|
Модульность-это хорошо.Я это, безусловно, пинимаю.Такой вопрос-если я забью на модульность и совместимость, получу ли я прирост скорости или там свободного места?
|
|
|
|
|
Aug 5 2008, 07:34
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(npopok @ Aug 5 2008, 11:22)  Такой вопрос-если я забью на модульность и совместимость, получу ли я прирост скорости или там свободного места? Встречный вопрос: а засчёт чего? Компилятор транслирует исходники функций в объектный код, линкер собирает из объектов файл прошивки. По большому счёту, им без разницы, в одном файле находятся функции или в 10. (20,50). Скорость и свободное место - понятия взаимоисключающие. Нужна скорость - inline и unrolling, соответственно теряем место. Не хватает места - обратная ситуация, приходится жертвовать скоростью.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Aug 5 2008, 10:00
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(MrYuran @ Aug 5 2008, 10:34)  Компилятор транслирует исходники функций в объектный код, линкер собирает из объектов файл прошивки. По большому счёту, им без разницы, в одном файле находятся функции или в 10. (20,50). Ну разница все-таки есть. Если все в одном файле, и функции объявлены как static. Компилятор может сделать более эффективный код (например повставлять инлайнов там где это не указано явно, повыбрасывать неиспользуемые функции, заменить "дальний" вызов на "ближний" для процессоров где это актуально и .т.п.). С т.з. оптимизации компилятору лучше сразу видеть весь код в одном файле, потому что линкер ничего оптимизировать не будет. Только читаемость когда "все в одном" будет никакой.
|
|
|
|
|
Aug 5 2008, 16:29
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(defunct @ Aug 5 2008, 13:00)  Если все в одном файле, и функции объявлены как static. Компилятор может сделать более эффективный код (например повставлять инлайнов там где это не указано явно, повыбрасывать неиспользуемые функции, заменить "дальний" вызов на "ближний" для процессоров где это актуально и .т.п.). С т.з. оптимизации компилятору лучше сразу видеть весь код в одном файле, потому что линкер ничего оптимизировать не будет. С gcc (не знаю просто, как с другими) можно при большом желании и на ёлку влезть, и всё такое прочее. Если указать в командной строке все .c файлы проекта сразу и добавить ключики -combine (объединить промежуточное представление всех файлов в одно целое) и -fwhole-program (и это объединение - вся программа), то он ведёт себя так, как якобы все функции этого общего представления статические, т.е. снаружи "этого всего" никому не нужны и проводит все эти оптимизации (выбрасывание ненужного, inline-подстановки используемого единственный раз либо достаточно мелкого). Для "окончательного релиза" это может и есть смысл делать. А вот замены вызовов на ближние делает как раз линкер, причём в том числе при линковке нескольких объектников и делает это в том числе со включенными из бибилиотек модулями. Ключ --relax
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
Сообщений в этой теме
npopok Как лучше писать Aug 5 2008, 06:42 MrYuran Обычно всегда стараюсь чётко разделить программу н... Aug 5 2008, 06:53 scifi Цитата(MrYuran @ Aug 5 2008, 10:53) Обычн... Aug 5 2008, 13:20 sergeeff Мы обычно поступаем так. Для примера. Одна пара С ... Aug 5 2008, 07:05  Сергей Борщ Цитата(MrYuran @ Aug 5 2008, 10:34) Встре... Aug 5 2008, 09:37  defunct Цитата(MrYuran @ Aug 5 2008, 10:34) Нужна... Aug 5 2008, 10:08 Kaplinsky Советую почитать книгу
"Анализ программного ... Aug 5 2008, 07:49 Duplex Цитата(Kaplinsky @ Aug 5 2008, 11:49) Сов... Aug 5 2008, 09:46  MrYuran Цитата(Duplex @ Aug 5 2008, 13:46) Цена: ... Aug 5 2008, 10:04   Duplex Цитата(MrYuran @ Aug 5 2008, 14:04) Потом... Aug 5 2008, 13:34    richie Полезность разбиения на логические модули не обсуж... Aug 5 2008, 14:45  Kaplinsky Цитата(Duplex @ Aug 5 2008, 12:46) Цена: ... Aug 5 2008, 20:24   Duplex Цитата(Kaplinsky @ Aug 6 2008, 00:24) Раз... Aug 6 2008, 06:36    MrYuran Цитата(Duplex @ Aug 6 2008, 10:36) Что по... Aug 6 2008, 06:55     Duplex Цитата(MrYuran @ Aug 6 2008, 10:55) Тольк... Aug 6 2008, 07:10 etoja Начни с этого: Aug 5 2008, 09:09 npopok Последнее ,конечно, полезно, но вообще не в тему Aug 5 2008, 09:32 sergeeff Я уже как-то писал и ссылки давал. Современные ком... Aug 5 2008, 15:51 ReAl А ещё функции можно дать атрибут externally_visibl... Aug 6 2008, 20:27
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|