Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.05;
Скачать: CL | DM;

Вниз

Приступ болезни "ОПТИМИЗАЦИЯ" - МОДУЛИ   Найти похожие ветки 

 
Паскальные надписи ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.028 c
1-1092850538
Реактор
2004-08-18 21:35
2004.09.05
Имитация клика мыши и нажатия кнопок.


14-1092915506
Agent13
2004-08-19 15:38
2004.09.05
Фотоателье обнаглели вконец...


3-1092090948
Dub
2004-08-10 02:35
2004.09.05
Фокусировка по полям


1-1092755778
Gear
2004-08-17 19:16
2004.09.05
мерцание в ListBox


4-1090572753
DAnton
2004-07-23 12:52
2004.09.05
Подскажите как перехватить клаву.