Авторизация

Логин: Пароль:
Регистрация Забыли свой пароль?

Оптимизация кода

Страницы: 1 2 След.
Оптимизация кода
Уважаемые программисты! Коллеги! smile:) Хотелось бы узнать Ваши способы написания оптимизированного программного кода. Используете ли вы указатели, безусловный переход?
Никогда особенно над этим не задумывался. Сейчас компилятор уже способен сам достаточно хорошо оптимизировать код. Программисту остается только оптимизировать алгоритм, чем мы в основном все и занимаемся.
Цитата
Артём Кулинич пишет:
Сейчас компилятор уже способен сам достаточно хорошо оптимизировать код. Программисту остается только оптимизировать алгоритм, чем мы в основном все и занимаемся.

Согласен, правильный выбор алгоритма, зачастую важнее "частных" оптимизаций кода... однако безусловный переход, тоже имеет свои плюсы и минусы... и в основном все таки минусы, но не в скорости работы, а в читабельности, и как следствие - дальнейшей поддержке кода.
А по поводу указателей - многоие вещи, без использования указателей - либо вообще нельзя сделать, либо опять-же в ущерб простоте и читабельности кода.
Цитата
Артём Кулинич пишет: Никогда особенно над этим не задумывался.

Ну, это от того, что большинство программистов в наше время имеет достаточный объём памяти для записи своего программного кода, те же микроконтроллеры сейчас имеют неплохой объём памяти, и в наше время об оптимизации задумываются в основном те, кто участвует на различных конкурсах написания программ на asm. Кстати, помнится как-то читал о случае, что человеку не хватало одного бита для записи прошивки, были подробно расписаны его изощрения с кодом, но сейчас уже и не найду, наверно.
пока ты не доволен жизнью - она проходит...
Есть уйма книг, если погуглить, то оптимизация очень полезная штука при разработке больших проектов. И правильно сказано, что алгоритм немало важен, но и конечно не надо забывать о модульности (подключение всяческих модулей).
smile:-)
Изменено: Umniki - 13.03.2010 23:27:40
http://sources.ru/wiki/doku.php?id=pascal:start


порылся в нете) тут можешь почитать про оптимизацию)
Оптимизация именно алгоритма очень важна для больших сложных задач. Я интересуюсь задачами в теории чисел, и там поиск решения может занимать месяцы. И от скорости алгоритма зависит очень многое. Правда, часто не понятно вообще, есть ли решение.
Accende lumen sensibus, infude ainorem corbidus!
motorway11, Я всё же считаю что для больших расчётов лучше использовать парралельное вычисление с помощью кластера, если расчёт на одном компьютере занимает месяц, то оптимизацией считающей программы тут не поможешь(хотя возможно ускоришь на пару дней =)).
свободный страннык
Да, это вариант, но такой кластер весьма дорогой обычно. Я обхожусь 2 компами дома. Уже больше 1.5 лет считаю сложную задачу в теории чисел. Но вот факт - у меня идёт перебор вариантов с некоторыми ограничениями, которые не сильно облегчают жизнь. Насколько-то помогают, но очень тормозной скрипт. А вот иностранный программист написал программу, которая считает в сотни раз быстрее. У него там особый алгоритм какой-то. Правда, для 64-битных компов.
Accende lumen sensibus, infude ainorem corbidus!
motorway11, ну не может оптимизация кода дать ускорение в расчёте в сотни раз, даже на 64битной машине, ну никаким образом, оптимизация может дать уменьшение занимаемой памяти самой программой - это да есть, а изменение алгоритма и структуры программы для серьёзного ускорения работы есть модернизация.
Вот она возможно может дать очень большое изменение в скорости, но для этого нужно отойти от существующей концепции и в корне что то менять.
Зачастую людей которые делают такое ускорение считают гениями, так вот я к чему это motorway11, как вы говорили того программиста звать?
свободный страннык
Да, действительно, может, это и не оптимизация в чистом виде, а просто переделка алгоритма. Не очень хотел бы раскрывать детали, что это за программисты (их 2), но они действительно считаются неплохими спецами в этой области. Но не всемирно известные.
Изменено: motorway11 - 14.03.2010 00:49:04
Accende lumen sensibus, infude ainorem corbidus!
Честно говоря, никогда не писал программ, что требуют очень много ресурсов. Оптимизация кода включает в себя оптимизацию алгоритма, без него никак и если алгоритм непродуман, то никакое правильное управление памятью не поможет.
Вот вспомнилось пример оптимизации,вычитанный в какой-то заумной книжке
старайтесь не использовать в операторах их множественные условия, лучше разделите их на несколько операторов
пример
if (a>1) or (a<1) then
можно представить так
if (a>1) then
...
if (a<1) then
...
Здесь возникает одно "но" - ведь после первого if будет опять проверка производиться. Так что надо пользоваться else, а не просто писать if. Хотя у меня такой стиль составления if до недавнего времени преобладал smile;)
Accende lumen sensibus, infude ainorem corbidus!
Цитата
motorway11 пишет:
Здесь возникает одно "но" - ведь после первого if будет опять проверка производиться. Так что надо пользоваться else, а не просто писать if. Хотя у меня такой стиль составления if до недавнего времени преобладал


в приведенном примере else использовать можно,но если условий будет больше 2х else уже будет неверно. И добавить в IF безусловный переход, либо exit (если это приминимо, например для функции или процедуры)
Да, в некоторых случаях я так и делал, использовал Goto. Но как раз потому, что это обычно может привести к запутанности, лучше постараться составить более правильный if.
Accende lumen sensibus, infude ainorem corbidus!
Цитата
mihail filatov пишет:
в приведенном примере else использовать можно,но если условий будет больше 2х else уже будет неверно. И добавить в IF безусловный переход, либо exit (если это приминимо, например для функции или процедуры)

Все-таки у меня появились сомнения - разве чем-то ограничено количество используемых else? Возможно, будет просто не так удобно читать код, но применять можно любое кол-во else. Или вы имели что-то другое в виду? Также можно просто использовать switch
Accende lumen sensibus, infude ainorem corbidus!
да при использовании многих else код читать будет сложнее. В общем то никто не ограничивает разработчика в его действиях и если человек пошел именно таким путем, значит у него были для этого основания.

конструкцией switch можно заменить только условия построенные на OR, конструкции с AND ей не заменишь
У меня довольно часто встречаются проверки с такими условиями. Там есть либо OR, либо AND. В принципе, довольно интересно, можно ли их как-то оптимизировать. Обычно бывает где-то около 3-5 условий. При этом я почти всегда надолго задумываюсь, когда пишу OR или AND с отрицанием - надо еще понять, чем они отличаются smile:D То есть, по-русски обычно такие условия звучат так: "если это или не то, и то-то, то...". Когда проверок около 5, уже действительно можно запутаться smile:) Так что, во-первых, можно для всей конструкции присвоить специальное имя, а в if вставлять только его, а не лепить в скобках все - тогда их число становится большим. Во-вторых, оптимизировать иногда можно путем замены на обратные проверки или замены логических функций (это не всегда получается).
Accende lumen sensibus, infude ainorem corbidus!
Вот еще вспомнил совет,по оптимизации IF условий.
Необходимость пользоваться флагами логических или числовых типов данных, там где это уместно

Сравнение строк, очень обременительная операция.
пример такой
repeat
...
until string_flag='стоп'

в данном случае лучше пользоваться флагом типа булин.

Так же есть по типу boolean. Фактически это бит, но выделить меньше байта нельзя. Значит если у вас 8 логических переменных, то будет выделенно 8 байт памяти. При этом можно использовать 1 байт, работаю с битами этого байта.
Вот, кстати, насчет оптимизации циклов - у меня довольно часто встречаются циклы, в том числе вложенные. Я часто использую for each. Можете ли вы привести советы по оптимизации циклов? Например, когда лучше использовать for each, когда наоборот, и что лучше по быстродействию.
Accende lumen sensibus, infude ainorem corbidus!
motorway11,, какой именно вид цикла использовать надо выбирать исходя из здравого смысла и логичности присутствия в данном месте данного типа цикла. Есть например способ замены итераций цикла на асм код, он выполняется быстрее, вот интересная статья на тему оптимизации циклов
http://www.realcoding.net/articles/optimizatsiya-tsikla.html
Обычно у меня стоит выбор: либо брать цикл от 1 до N (которое можно обычно определить через свойство длины массива), либо For Each. Мне кажется, что для моих проблем они примерно одинаковы, хотя оптимизировать можно, теоретически. У меня обычно встречаются двойные циклы по таблице ячеек. Число итераций часто бывает в районе десятков тысяч, и тут должны, по идее, проявляться особенности выбора цикла. Кто из них тратит больше времени на доп. затраты и т.п. В последнее время стал чаще использовать цикл по i,j, а не For Each. Но обычно это опытным путем определяется. Тут вроде бы перекосов в ту или иную сторону нет, что лучше брать.
Правда, все время не поэкспериментируешь, так что какие-то общие рекомендации нужно все-таки знать.
А насчет ассемблера - хоть я его и изучал немного, на практике на нем ничего не писал. Чтобы на нем писать, нужно иметь большую ответственность - там уже все на низком уровне, так что надо полностью понимать, что делаешь smile:D.
Accende lumen sensibus, infude ainorem corbidus!
Ссылочка в тему:
http://lurkmore.ru/%D0%98%D0%BD%D0%B4%D1%83%D1%81
Улыбает smile:)
Я иногда люблю читать такие вещи, чтобы немного отвлечься и отдохнуть. Там даже можно какие-то идеи почерпнуть smile;) У меня, кстати, в одном скрипте идет около 100 вызовов функции замены строки, так как там надо заменять разные комбинации символов типа *(, +(, -( на что-то другое. Это из-за того, что существует много знаков различных. При написании я долго не утруждался с оптимизацией, хотя выглядит это как огромный кусок кода. Хорошо еще, что выполняется относительно быстро, сам скрипт не больше 1-2 секунд. А могло быть и хуже...
Но все-таки из этого можно извлечь умную мысль - сперва надо оптимизировать только наиболее критичные участки кода. И измерить, что же дает "затык" в производительности
Accende lumen sensibus, infude ainorem corbidus!
Страницы: 1 2 След.
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)