реклама на сайте
подробности

 
 
> Как лучше писать
npopok
сообщение Aug 5 2008, 06:42
Сообщение #1





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



Keil mVision.Соответственно, есть куча разных функций.Одни для одного,другие для другого, где то они пересекаюся и не редко.В общем, как обычно.Вот вопрос-стоит ли собирать их в разные си файлы и делать кучу extern-ов, или лучше все-таки без особой необходимости этого не делать.Может, надо искать золотую середину?Есть ли какие-нибудь критерии,кроме здравого смысла? На что это влияет?Спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
npopok
сообщение Aug 5 2008, 07:22
Сообщение #2





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



Модульность-это хорошо.Я это, безусловно, пинимаю.Такой вопрос-если я забью на модульность и совместимость, получу ли я прирост скорости или там свободного места?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 5 2008, 07:34
Сообщение #3


Беспросветный оптимист
******

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



Цитата(npopok @ Aug 5 2008, 11:22) *
Такой вопрос-если я забью на модульность и совместимость, получу ли я прирост скорости или там свободного места?

Встречный вопрос: а засчёт чего?
Компилятор транслирует исходники функций в объектный код, линкер собирает из объектов файл прошивки. По большому счёту, им без разницы, в одном файле находятся функции или в 10. (20,50).
Скорость и свободное место - понятия взаимоисключающие.
Нужна скорость - inline и unrolling, соответственно теряем место.
Не хватает места - обратная ситуация, приходится жертвовать скоростью.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 5 2008, 10:00
Сообщение #4


кекс
******

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



Цитата(MrYuran @ Aug 5 2008, 10:34) *
Компилятор транслирует исходники функций в объектный код, линкер собирает из объектов файл прошивки. По большому счёту, им без разницы, в одном файле находятся функции или в 10. (20,50).

Ну разница все-таки есть.
Если все в одном файле, и функции объявлены как static. Компилятор может сделать более эффективный код (например повставлять инлайнов там где это не указано явно, повыбрасывать неиспользуемые функции, заменить "дальний" вызов на "ближний" для процессоров где это актуально и .т.п.). С т.з. оптимизации компилятору лучше сразу видеть весь код в одном файле, потому что линкер ничего оптимизировать не будет.

Только читаемость когда "все в одном" будет никакой.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Aug 5 2008, 16:29
Сообщение #5


Нечётный пользователь.
******

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



Цитата(defunct @ Aug 5 2008, 13:00) *
Если все в одном файле, и функции объявлены как static. Компилятор может сделать более эффективный код (например повставлять инлайнов там где это не указано явно, повыбрасывать неиспользуемые функции, заменить "дальний" вызов на "ближний" для процессоров где это актуально и .т.п.). С т.з. оптимизации компилятору лучше сразу видеть весь код в одном файле, потому что линкер ничего оптимизировать не будет.

С gcc (не знаю просто, как с другими) можно при большом желании и на ёлку влезть, и всё такое прочее.
Если указать в командной строке все .c файлы проекта сразу и добавить ключики -combine (объединить промежуточное представление всех файлов в одно целое) и -fwhole-program (и это объединение - вся программа), то он ведёт себя так, как якобы все функции этого общего представления статические, т.е. снаружи "этого всего" никому не нужны и проводит все эти оптимизации (выбрасывание ненужного, inline-подстановки используемого единственный раз либо достаточно мелкого). Для "окончательного релиза" это может и есть смысл делать.

А вот замены вызовов на ближние делает как раз линкер, причём в том числе при линковке нескольких объектников и делает это в том числе со включенными из бибилиотек модулями.
Ключ --relax


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 6 2008, 13:00
Сообщение #6


кекс
******

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



Цитата(ReAl @ Aug 5 2008, 19:29) *
-fwhole-program (и это объединение - вся программа), то он ведёт себя так, как якобы все функции этого общего представления статические, т.е. снаружи "этого всего" никому не нужны и проводит все эти оптимизации

Вот это зачОт! Спасибо, не знал о такой возможности.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 01:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01426 секунд с 7
ELECTRONIX ©2004-2016