|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.04.2012, 13:01 | #1 |
Всё знать хотяка!
Пользователь
Регистрация: 21.04.2009
Сообщений: 67
|
Case vs If in C - минимультивопрос
Всем привет. =) И снова я. Итак:
1. У оператора Case есть ограничения по количеству кэйзов? Т.е. он выдержит конструкцию из 700-та с лишним(а может и 2000 с лишним) вариантов выбора? 2. Что шустрее работает - куча(те же самые 2000) If-ов(да, пусть ещё в конце каждого if сделать "goto propusk_vseh_ostalnih_ifov", чтоб не плодить else-ы) или точно такой же большой Case? (так то нужно добиться скорости в несколько микросекунд... или около того... но это уже не суть) *чтоб не спрашивали лишний раз для чего мне это - речь о микроконтроллере, энкодере и 2к+ его положениях, при каждом из которых контроллер отсылает в "импровизированнуюминисеть" определённую команду... кстати, отсюда ещё вопрос - выдержит ли контроллер(ATMega16) столько кода внутри себя?... но это уже вопрос тестирования ;( ...*
Я вредный и нервный, но бдобр.
|
14.04.2012, 13:06 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
1)выдержит.
2)считаю что в вашем случае лучше case. *если памяти(я не знаю размера вашей программы) хватит то выдержит, почему нет то? Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
14.04.2012, 13:13 | #3 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Белая магия компилятора может превратить свитч в хитрую структуру данных, наподобие map
Где ключ - это значение case, а значение по ключу - указатель на функцию, которая запустит блок case на выполнение. Таким образом, в боевом коде свитч не будет пошагово проверять каждое значение case, а сразу прыгнет на функцию-блок нужного case. Точная конструкция этой хитрой структуры зависит от компилятора с его оптимизациями. Одно можно сказать совершенно наверняка: В целом, конструкции типа: Код:
Поэтому, можно считать, что switсh в среднем работает быстрее, за счет того, что потенциально лучше может быть оптимизирован. Но вообще есть нюансы. Например, если конкретный блок отработавшего case не break`неццо, то сам блок switсh не закончит свою работу, а будит продолжаться поиск уже нового претендента case Поэтому, независимо от того, во что блок switсh превратит белая магия компилятора, но на уровне самого исходного кода порядок следования case важен. Он определяет логику работы самого блока switсh. |
14.04.2012, 13:22 | #4 |
Всё знать хотяка!
Пользователь
Регистрация: 21.04.2009
Сообщений: 67
|
Щас вроде прога, если память не подводит(на руках её нет, на работе лежит), занимает всего около 20% памяти... так что тоже думаю должен выдержать(в том плане, что должно поместиться).
Мгм, понятно. Ок, спасибище. Развеяли мои хмурые ранне весенние мысли!)))) ps: А кстати, пока я не убежал - глупый вопрос в догонку... Где то слышал, что использование goto в коде вообще подрывает любые работы по оптимизации... так вот если у меня в начале кода и кое где в конце есть goto(ну люблю я goto и всё)) - это критично скажется на оптимизации моего многодетного Case-а, который лежит где то в середине?... просто может кто сталкивался с подобным, мне гуглить щас лень =3 ))))
Я вредный и нервный, но бдобр.
Последний раз редактировалось Karp_13; 14.04.2012 в 13:38. |
14.04.2012, 17:24 | #5 | |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
Цитата:
Знающий не говорит, говорящий не знает (С) Лао Цзы
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
case от а до я | Horus92 | Помощь студентам | 7 | 15.07.2010 01:43 |
Use case | elenSV | Помощь студентам | 0 | 09.06.2010 22:28 |
Case of | Lemo | Помощь студентам | 4 | 06.06.2010 01:12 |
Case Is | nes@ | Помощь студентам | 0 | 18.11.2009 20:21 |