vtodymyr17m
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 27
|
|
1 | |
Определение эффективности программного кода.04.03.2014, 00:15. Просмотров 39976. Ответов 199
Метки нет Все метки)
(
Всем привет, собственно вопрос в заголовке, есть ли какие-нибудь методы, которые позволят определить на сколько та или иная функция или вся программа целиком, написана эффективно т.е. соответствует минимальному количеству занимаемой памяти программ и тактов процессора, необходимых для выполнение программы, которой в свою очередь предъявляется некоторый список требований?
0
|
|
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
04.03.2014, 00:15 |
Ответы с готовыми решениями:
199
Организация тестирования программного кода для МК Определение времени работы кода для ATmega128 Экспериментальное определение эффективности сортировки Оценка эффективности кода
|
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
|
|
04.03.2014, 00:42 | 2 |
0
|
oxytt
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 4,224
|
|
04.03.2014, 01:12 | 3 |
абсолютного критерия эффективного кода нет. Есть "хорошие правила" как писать эффективный код и если взять программу то почти любую можно хоть чуть чуть но улучшить как с точки зрения оптимизации логики так и с точки зрения применения "хороших правил", а после оптимизации можно сделать сравнительный объективный анализ занимаемой памяти, размера кода и производительности "до" и "после"
насчет "хороших правил" можете тут почитать http://chipenable.ru/index.php/programm ... -code.html
0
|
mrKyrytt
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 767
|
|
04.03.2014, 07:14 | 4 |
Код выполняет поставленные задачи - эффективный, не выполняет - не эффективный :)
0
|
04.03.2014, 07:14 | |
TioMoom
0 / 0 / 0
Регистрация: 19.01.2014
Сообщений: 44
|
|
04.03.2014, 09:08 | 5 |
Проблема в том что есть эффективность по времени и эффективность по памяти (а еще и удобство сопровождения :) = чтение и изменение кода) и обычно они взаимо исключают друг друга.
Код который устраивает по всем критериям называется оптимальным :) вот надо как раз стараться получать оптимальные решения (в общем случае).
0
|
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
|
|
04.03.2014, 09:19 | 6 |
И ещё в 99% случаев оптимизировать весь код нет необходимости - достаточно узкие места. А в остальных - чтоб была хорошая читаемость и без явных ляпов типа slowsort и алгоритма маляра Шлемиэля.
Ну и все неочевидные оптимизации комментировать.
0
|
vtodymyr17m
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 27
|
|
05.03.2014, 22:04 | 7 |
Сейчас пытаюсь писать на ассемблере и получил очень не хорошую ситуацию связанную с читаемостью кода, есть программа около 500 строк каждая строка, до недавнего времени, у меня была с комментарием, но особой читаемости это не дало отдельные действия программы были расписаны, но полного представления о программе и алгоритме ее выполнения не видно, может есть какие-нибудь рекомендации по поводу читаемости?
0
|
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
|
|
05.03.2014, 23:02 | 8 |
Рекомендация очень простая - перестать заниматься тем, чем вы там занимаетесь, и начать программировать. Ну, или перестать париться насчет читаемости, если ваши занятия имеют какую-то цель, кроме убийства времени.
0
|
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
|
|
05.03.2014, 23:48 | 9 |
Вы пытаетесь писать на ассемблере, не зная других языков, или переходите с языка высокого уровня?
Если второе, то прикиньте, нельзя ли ограничиться переписыванием на асм 5-10% кода. Редко когда надо больше.
0
|
vtodymyr17m
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 27
|
|
06.03.2014, 20:42 | 10 |
![]()
0
|
vtodymyr17m
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 27
|
|
06.03.2014, 20:47 | 11 |
![]()
0
|
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
|
|
06.03.2014, 21:38 | 12 |
А вот как раз это и есть основная задача профайлинга - выявить такие куски :-)
Обычно - самый внутренний (часто повторяющийся) цикл. Постараться вынести из него всё, что можно (полезно прочитать про инвариант цикла). В общем, выискиваются маленькие куски кода, на которые уходит много времени. Как пример - http://russian.joelonsoftware.com/Artic ... asics.html Освоить си - правильное решение, тем паче, не надо изучать все его возможности. Куда проще ассемблера получается :-).
0
|
ot135vb
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 27
|
|
06.03.2014, 21:44 | 13 |
Чтобы программа на ассемблере хорошо читалась и был понятен алгоритм,
помимо комментариев, не мешает перед началом написания тщательно продумать весь алгоритм. Зарисовать всё в виде прямоугольников, ромбиков, стрелочек и т.д. На каждой стрелке,указывающей переход поставить имя метки. А уж затем начинать писать программу. Конечно, первый этап для многих не интересен. Хочется сразу писать,писать и писать программу до полного самоистязания..
0
|
vtodymyr17m
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 27
|
|
06.03.2014, 22:06 | 14 |
![]()
0
|
vtodymyr17m
0 / 0 / 0
Регистрация: 27.10.2012
Сообщений: 27
|
|
06.03.2014, 22:16 | 15 |
![]()
0
|
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
|
|
06.03.2014, 22:29 | 16 |
Не-не-не, в стандартные библиотеки поначалу не суйтесь особо. Помигать диодом или там таймер настроить на avr - ничего особо не надо, всё как на асме, только короче и не надо думать о распределении регистров.
Главное - приучиться разбивать код на функции так, чтобы кусок кода, который надо понимать одновременно, можно было сразу увидеть (а детали были в отдельных функциях). Блок-схемы, кстати, лично я с детства не понимаю. Ну то есть они по мне заточены под ассемблер или бейсик 80-х с мешаниной goto. А если программа вся по блокам (функции, циклы, if-then-else) - то просто записи с отступами хватает, при этом на листочке куда больше помещается. Но если вам удобнее квадратики - это тоже Ok. Кстати, если функции небольшие - то хватает комментариев с назначением функции, смыслом параметров (если неочевиден из названия) и результата. В общем, чтобы в код функции потом не смотреть.
0
|
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
|
|
06.03.2014, 23:37 | 17 |
Блин, ребята, на дворе 2014 год. Изучать ассемблер для того чтобы перейти с него на С - это уже просто за гранью добра и зла :) Сие мероприятие потеряло актуальность уже лет 15 назад...
Влидимир, срочно бросайте заниматься ерундой, и начинайте осваивать программирование. Ассемблер в том объеме, в котором он вам когда-либо пригодится, вы уже освоили, судя по тому что столкнулись с проблемой читаемости большой программы. А если реально хотите разобраться, как все работает, то вам не ассемблер нужен, а гораздо более низкоуровневые вещи. Программа на ассемблере на самом деле почти ничем не отличается от программы на С, работает ровно на том же уровне, с теми же сущностями. И по мере того, как вы будете осваивать программирование, к вам будет приходить осознание весьма важной вещи - не столь важно понимать, что конкретно делает программа, гораздо важнее понимать что делает программист.
0
|
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
|
|
07.03.2014, 01:10 | 18 |
![]() Проект данной оси, кстати, вошёл в программу финансировния студенческого GSOC 2014 ![]() возможностей архитектуры (системы команд и др.) в компиляторе сильно ограничена. P.S. Читаемость большой программы на AVR ассемблере можно повысить используя Алгоритм Билдер. Cкажу также "крамольную" мысль. Можно эффективно создавать программы без синтаксической "шелухи" С подобных языков c упором на семантику что Вы и сами поняли создавая программы на ассемблере. Но более лёгкий и эффективный язык для семантического выражения программ не отягащённого синтаксисом. Барабанная дробь ... Форт (Forth) :)
0
|
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
|
|
07.03.2014, 01:39 | 19 |
![]()
0
|
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
|
|
07.03.2014, 01:43 | 20 |
![]() Если перейти на более высокий уровень сопровождения кода то HiAsm подобное направление. P.S. Думать и учиться никогда не поздно :)
0
|
07.03.2014, 01:43 | |
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
07.03.2014, 01:43 |
Определение иерархии программного обеспечения
Описание программного кода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |