Форум: "Потрепаться";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];
ВнизПриступ болезни "ОПТИМИЗАЦИЯ" - МОДУЛИ Найти похожие ветки
← →
Паскальные надписи © (2004-08-14 00:14) [0]Меня интересуют следующие вопросы:
1. Намного ли быстрее вызов функции из этого же модуля, чем из
другого?
Я понимаю, что модульность, читабельность кода не менее важны,
чем скорость, но если стоит выбор: в каком модуле писать
небольшую функцию - в том, где она вызывается, или где она
по смыслу больше подходит...
2. Дописываю в раздел uses большой модуль (простой unit) -
размер .exe резко возрастает. Это понятно.
Вот в Си,
читал, если функция
из модуля не используется, то она не увеличивает размер
памяти.
Это связано с другой схемой компиляции, многопроходностью?
Не портит ли это красоту программирования, как, например,
оператор Goto?
3. DLL. Стоит ли стремиться заменять на них обычные модули с
функциями, или иногда это вредно? Когда?
4. Есть несколько модулей, ссылающихся друг на друга. Это плохо?
Что с памятью? И что говорят всё те же неписаные правила
программирования?
Заранее спасибо
← →
Игорь Шевченко © (2004-08-14 00:39) [1]
> 1. Намного ли быстрее вызов функции из этого же модуля,
> чем из
> другого?
Одинаково.
> где она вызывается, или где она
> по смыслу больше подходит...
???
> 2. Дописываю в раздел uses большой модуль (простой unit)
> -
> размер .exe резко возрастает. Это понятно.
> Вот в Си,
> читал, если функция
> из модуля не используется, то она не увеличивает размер
> памяти.
В Паскале тоже не включается и не увеличивает.
> 3. DLL. Стоит ли стремиться заменять на них обычные модули
> с
> функциями, или иногда это вредно? Когда?
Когда используются больше чем одним приложением.
> 4. Есть несколько модулей, ссылающихся друг на друга. Это
> плохо?
Нормально
> Что с памятью?
Ничего
> И что говорят всё те же неписаные правила
> программирования?
Зависит от ситуации, возможно, нужно перепроектировать. Код в студию.
← →
Fay © (2004-08-14 05:01) [2]2 Игорь Шевченко © (14.08.04 00:39) [1]
>> В Паскале тоже не включается и не увеличивает.
К пустому проекту прибейте SvcMgr. Получите ~400 кб.
← →
TUser © (2004-08-14 05:11) [3]
> В Паскале тоже не включается и не увеличивает.
Есть рядом ветка про это. Пихается в exe код инициализации/финализации модуля, + те штуки, которые там используются. Вероятно твое увелинение размера связано с этим. Хотя, возможен и дркгой вариант - у тебя используется в программе переменная A:TA, ТА описан в unit125, ты цепляешь unit126, в котором тоже есть TA, но другой и гораздо больше.
Про си точно не знаю, вроде бы там именно так и есть, хотя начальник мой (сишник) говорил, что iostream прицепляется сразу весь, даже если оттуда почти ничего не используется. Но я думаю, что он не прав в данном вопросе.
> 3. DLL. Стоит ли стремиться заменять на них обычные модули с функциями, или иногда это вредно? Когда?
Вот надо использовать dll - а. если есть подозрение, что в другой программе может понадобиться что-то из этих ф-ций. б. если эти ф-ции занимают много места, но реально нужны далеко не всегда, тогда динамически подгружаем. в. если нужны переключаемые модули, например для скинов. г. если работаем с плагинами д. если хотим сделать маленький экзешник и кинуть по этому поводу пальцы е. и т.д.
← →
Fay © (2004-08-14 05:25) [4]>> Не портит ли это красоту программирования, как, например,
>> оператор Goto?
Не портит (если специально не постараться). Иногда создаёт.
По это поводу можно поспорить, но не с "машинным кодом". 8)
← →
Sergey Masloff (2004-08-14 07:49) [5]Fay © (14.08.04 05:01) [2]
>> В Паскале тоже не включается и не увеличивает.
>К пустому проекту прибейте SvcMgr. Получите ~400 кб.
Ну и? Говорится - НЕИСПОЛЬЗУЕМЫЕ.
Добавятся только ИСПОЛЬЗУЕМЫЕ. Например, используемые в секции initialization включаемого модуля и модулей которые есть в USES включаемого.
← →
KSergey © (2004-08-14 09:14) [6]> 4. Есть несколько модулей, ссылающихся друг на друга. Это
> плохо?
Нормально.
Возможно, Игорь что-то просто недоговорил или не совсем для меня понятно. но хотелось бы сказать от себя (дальнейшее в его посте тоже не совсем это выражает).
Если есть "колцевые" повязки - 99.99% - плохо. И даже очень. Есть лишь редкие случаи, когда без этого вроде как нельзя обойтись, хотя, если изменить структуру модулей - то можно всегда (?). Исключение - не свои модули, менять которые нельзя, тяжелое наследие и т.п.
← →
SPeller © (2004-08-14 09:26) [7]На счет увеличения размера EXE при простом подключении его в usues - секции инициализации/финализации могут быть и пустыми, но прилинкуются описания классов, некоторые константы, и возможно ещё что-то.
← →
KSergey © (2004-08-14 09:43) [8]> [7] SPeller © (14.08.04 09:26)
Ни описания классов, ни тем более константы - никуда не линкуются ;)
Все это эфимерно и существует лишь на стадии компиляции. После ни о каких константах никто уже ничего не знает.
Ну я ладно, дуб, но неужели мастерам не верите? ;)
← →
TUser © (2004-08-14 10:49) [9]
> Если есть "колцевые" повязки - 99.99% - плохо. И даже очень.
Почему? Это безумно удобно. И особых ошибок при этом вроде не возникает (я в своих прогах пока ни одного глюка не нашел, который был бы с этим связан, хотя такие связи между модулями использую довольно регулярно).
← →
KSergey © (2004-08-14 10:52) [10]> [9] TUser © (14.08.04 10:49)
> > Если есть "колцевые" повязки - 99.99% - плохо. И даже
> очень.
> Почему?
Потому, что код модулей становится слишком взаимозависим.
Такой код крайне трудно поддерживать и развивать.
При этом удобства нет никакого. Одна головная боль: тут поправил, а оказывается это использовалось еще там, там и там... И вообще, так правит было нельзя, т.к. на это была завязка еще вот тут и тут, а это тянет за собой еще вот это....
Это ужас.
← →
TUser © (2004-08-14 11:25) [11]Не знаю. У меня таких траблов не было.
← →
cyborg © (2004-08-14 15:22) [12]
> [9] TUser © (14.08.04 10:49)
Умудрился я как-то на Фрипаскале такой написать, так он при компиляции зациклился, файл всё рос и рос пока процесс не прибил :)
← →
Иван Шихалев © (2004-08-14 16:43) [13]>> Если есть "колцевые" повязки - 99.99% - плохо. И даже очень.
> Почему?
Потому, что еще раньше была допущена ошибка при проектировании структуры модулей.
← →
Паскальные надписи © (2004-08-14 17:02) [14]
> Код в студию.
Нету кода.
Просто интересно. И, наверное, не я один болен. :)
← →
TUser © (2004-08-14 17:22) [15]
> Умудрился я как-то на Фрипаскале такой написать, так он
> при компиляции зациклился, файл всё рос и рос пока процесс
> не прибил :)
Не знаю, как на фрипаскале, но на d такого не будет, ИМХО. Каждй модуль прицепится один раз.
← →
GuAV © (2004-08-14 17:27) [16]KSergey © (14.08.04 10:52) [10]
VCL "взаимозависима". Но с этим у неё проблем нет.
← →
TUser © (2004-08-14 17:54) [17]
> VCL "взаимозависима". Но с этим у неё проблем нет.
На самом деле VCL просто уже 1 раз отлажена, и изменяют ее только гении и злодеи. А если пишим новые мождули с нуля - то надо понять, что модуль во многом аналогичен классу, инкапсуляция и полиморфизм есть, только наследования нет. И нельзя создавать много копий - объектов данного класса.
Та же проблема, следовательно может возникнуть и в рамках одного модуля, например,
TCl1 =class;
TCl2 = class;
TCl3 = class;
TCl1 = class
private
FChild:TCl2;
end;
TCl2 = class
pravate
FChilds:array of TCl3;
end;
TCl3 = class
pravate
FMainParent:TCl1;
end;
Тоже - не уследишь, изменишб чего-нибужь и кирдык.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.08 c