Уважаемые программисты! Коллеги!
Хотелось бы узнать Ваши способы написания оптимизированного программного кода. Используете ли вы указатели, безусловный переход?
Оптимизация кода
Оптимизация кода
|
30.11.2009 23:30:58
|
|
|
|
|
|
01.12.2009 16:28:29
Никогда особенно над этим не задумывался. Сейчас компилятор уже способен сам достаточно хорошо оптимизировать код. Программисту остается только оптимизировать алгоритм, чем мы в основном все и занимаемся.
|
|
|
|
|
|
02.12.2009 20:04:14
Согласен, правильный выбор алгоритма, зачастую важнее "частных" оптимизаций кода... однако безусловный переход, тоже имеет свои плюсы и минусы... и в основном все таки минусы, но не в скорости работы, а в читабельности, и как следствие - дальнейшей поддержке кода. А по поводу указателей - многоие вещи, без использования указателей - либо вообще нельзя сделать, либо опять-же в ущерб простоте и читабельности кода. |
|||
|
|
|
|
13.03.2010 11:56:49
Ну, это от того, что большинство программистов в наше время имеет достаточный объём памяти для записи своего программного кода, те же микроконтроллеры сейчас имеют неплохой объём памяти, и в наше время об оптимизации задумываются в основном те, кто участвует на различных конкурсах написания программ на asm. Кстати, помнится как-то читал о случае, что человеку не хватало одного бита для записи прошивки, были подробно расписаны его изощрения с кодом, но сейчас уже и не найду, наверно.
пока ты не доволен жизнью - она проходит...
|
|||
|
|
|
|
13.03.2010 18:06:07
Есть уйма книг, если погуглить, то оптимизация очень полезная штука при разработке больших проектов. И правильно сказано, что алгоритм немало важен, но и конечно не надо забывать о модульности (подключение всяческих модулей).
Изменено:
Umniki - 13.03.2010 23:27:40
|
|
|
|
|
|
13.03.2010 20:52:57
http://sources.ru/wiki/doku.php?id=pascal:start
порылся в нете) тут можешь почитать про оптимизацию) |
|
|
|
|
|
13.03.2010 22:19:04
Оптимизация именно алгоритма очень важна для больших сложных задач. Я интересуюсь задачами в теории чисел, и там поиск решения может занимать месяцы. И от скорости алгоритма зависит очень многое. Правда, часто не понятно вообще, есть ли решение.
Accende lumen sensibus, infude ainorem corbidus!
|
|
|
|
|
|
13.03.2010 23:28:07
motorway11, Я всё же считаю что для больших расчётов лучше использовать парралельное вычисление с помощью кластера, если расчёт на одном компьютере занимает месяц, то оптимизацией считающей программы тут не поможешь(хотя возможно ускоришь на пару дней =)).
свободный страннык
|
|
|
|
|
|
13.03.2010 23:38:38
Да, это вариант, но такой кластер весьма дорогой обычно. Я обхожусь 2 компами дома. Уже больше 1.5 лет считаю сложную задачу в теории чисел. Но вот факт - у меня идёт перебор вариантов с некоторыми ограничениями, которые не сильно облегчают жизнь. Насколько-то помогают, но очень тормозной скрипт. А вот иностранный программист написал программу, которая считает в сотни раз быстрее. У него там особый алгоритм какой-то. Правда, для 64-битных компов.
Accende lumen sensibus, infude ainorem corbidus!
|
|
|
|
|
|
14.03.2010 00:30:26
motorway11, ну не может оптимизация кода дать ускорение в расчёте в сотни раз, даже на 64битной машине, ну никаким образом, оптимизация может дать уменьшение занимаемой памяти самой программой - это да есть, а изменение алгоритма и структуры программы для серьёзного ускорения работы есть модернизация.
Вот она возможно может дать очень большое изменение в скорости, но для этого нужно отойти от существующей концепции и в корне что то менять. Зачастую людей которые делают такое ускорение считают гениями, так вот я к чему это motorway11, как вы говорили того программиста звать?
свободный страннык
|
|
|
|
|
|
14.03.2010 00:45:51
Да, действительно, может, это и не оптимизация в чистом виде, а просто переделка алгоритма. Не очень хотел бы раскрывать детали, что это за программисты (их 2), но они действительно считаются неплохими спецами в этой области. Но не всемирно известные.
Изменено:
motorway11 - 14.03.2010 00:49:04
Accende lumen sensibus, infude ainorem corbidus!
|
|
|
|
|
|
23.03.2010 17:44:20
Честно говоря, никогда не писал программ, что требуют очень много ресурсов. Оптимизация кода включает в себя оптимизацию алгоритма, без него никак и если алгоритм непродуман, то никакое правильное управление памятью не поможет.
|
|
|
|
|
|
27.05.2010 22:49:28
Вот вспомнилось пример оптимизации,вычитанный в какой-то заумной книжке
старайтесь не использовать в операторах их множественные условия, лучше разделите их на несколько операторов пример if (a>1) or (a<1) then можно представить так if (a>1) then ... if (a<1) then ... |
|
|
|
|
|
27.05.2010 23:45:49
Здесь возникает одно "но" - ведь после первого if будет опять проверка производиться. Так что надо пользоваться else, а не просто писать if. Хотя у меня такой стиль составления if до недавнего времени преобладал
Accende lumen sensibus, infude ainorem corbidus!
|
|
|
|
|
|
27.05.2010 23:52:44
в приведенном примере else использовать можно,но если условий будет больше 2х else уже будет неверно. И добавить в IF безусловный переход, либо exit (если это приминимо, например для функции или процедуры) |
|||
|
|
|
|
27.05.2010 23:59:39
Да, в некоторых случаях я так и делал, использовал Goto. Но как раз потому, что это обычно может привести к запутанности, лучше постараться составить более правильный if.
Accende lumen sensibus, infude ainorem corbidus!
|
|
|
|
|
|
28.05.2010 00:06:46
Все-таки у меня появились сомнения - разве чем-то ограничено количество используемых else? Возможно, будет просто не так удобно читать код, но применять можно любое кол-во else. Или вы имели что-то другое в виду? Также можно просто использовать switch
Accende lumen sensibus, infude ainorem corbidus!
|
|||
|
|
|
|
28.05.2010 00:13:08
да при использовании многих else код читать будет сложнее. В общем то никто не ограничивает разработчика в его действиях и если человек пошел именно таким путем, значит у него были для этого основания.
конструкцией switch можно заменить только условия построенные на OR, конструкции с AND ей не заменишь |
|
|
|
|
|
28.05.2010 00:20:57
У меня довольно часто встречаются проверки с такими условиями. Там есть либо OR, либо AND. В принципе, довольно интересно, можно ли их как-то оптимизировать. Обычно бывает где-то около 3-5 условий. При этом я почти всегда надолго задумываюсь, когда пишу OR или AND с отрицанием - надо еще понять, чем они отличаются
Accende lumen sensibus, infude ainorem corbidus!
|
|
|
|
|
|
28.05.2010 07:44:17
Вот еще вспомнил совет,по оптимизации IF условий.
Необходимость пользоваться флагами логических или числовых типов данных, там где это уместно Сравнение строк, очень обременительная операция. пример такой repeat ... until string_flag='стоп' в данном случае лучше пользоваться флагом типа булин. Так же есть по типу boolean. Фактически это бит, но выделить меньше байта нельзя. Значит если у вас 8 логических переменных, то будет выделенно 8 байт памяти. При этом можно использовать 1 байт, работаю с битами этого байта. |
|
|
|
|
|
31.05.2010 16:04:13
Вот, кстати, насчет оптимизации циклов - у меня довольно часто встречаются циклы, в том числе вложенные. Я часто использую for each. Можете ли вы привести советы по оптимизации циклов? Например, когда лучше использовать for each, когда наоборот, и что лучше по быстродействию.
Accende lumen sensibus, infude ainorem corbidus!
|
|
|
|
|
|
31.05.2010 16:47:50
motorway11,, какой именно вид цикла использовать надо выбирать исходя из здравого смысла и логичности присутствия в данном месте данного типа цикла. Есть например способ замены итераций цикла на асм код, он выполняется быстрее, вот интересная статья на тему оптимизации циклов
http://www.realcoding.net/articles/optimizatsiya-tsikla.html |
|
|
|
|
|
31.05.2010 17:03:16
Обычно у меня стоит выбор: либо брать цикл от 1 до N (которое можно обычно определить через свойство длины массива), либо For Each. Мне кажется, что для моих проблем они примерно одинаковы, хотя оптимизировать можно, теоретически. У меня обычно встречаются двойные циклы по таблице ячеек. Число итераций часто бывает в районе десятков тысяч, и тут должны, по идее, проявляться особенности выбора цикла. Кто из них тратит больше времени на доп. затраты и т.п. В последнее время стал чаще использовать цикл по i,j, а не For Each. Но обычно это опытным путем определяется. Тут вроде бы перекосов в ту или иную сторону нет, что лучше брать.
Правда, все время не поэкспериментируешь, так что какие-то общие рекомендации нужно все-таки знать. А насчет ассемблера - хоть я его и изучал немного, на практике на нем ничего не писал. Чтобы на нем писать, нужно иметь большую ответственность - там уже все на низком уровне, так что надо полностью понимать, что делаешь
Accende lumen sensibus, infude ainorem corbidus!
|
|
|
|
|
|
31.05.2010 17:07:13
|
|
|
|
|
|
31.05.2010 17:15:55
Я иногда люблю читать такие вещи, чтобы немного отвлечься и отдохнуть. Там даже можно какие-то идеи почерпнуть
Но все-таки из этого можно извлечь умную мысль - сперва надо оптимизировать только наиболее критичные участки кода. И измерить, что же дает "затык" в производительности
Accende lumen sensibus, infude ainorem corbidus!
|
||||
|
|
|
|||
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)