Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
4-1090356969
[ping]VIN
2004-07-21 00:56
2004.09.05
GetLogicalDrivers


3-1092359954
vasko
2004-08-13 05:19
2004.09.05
Как приконектится к запароленной базе


14-1092662426
nasty
2004-08-16 17:20
2004.09.05
создание справочной системы по спроектированным классам


14-1092122469
VMcL
2004-08-10 11:21
2004.09.05
И снова пестня...


3-1091771361
strelok-47
2004-08-06 09:49
2004.09.05
Как перерисовать конкретную ячейку грида, а не весь грид?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский