Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
В switch ( expression ) expression должно быть: "The expression must be of an integral type or of a class type for which there is an unambiguous conversion to integral type". Если switch содержит несколько case /от 2 до 4/, то проблем нет. Ну а если скажем case будет 30 штук, то для доступа к 29 по счету case, компилятор должен произвести 29 операций сравнения. Ниже предлагается один из вариантов решения этой проблемы. И так программа в качестве expression должна передавать номер индекса к какому-либо array, содержащему адреса точек перехода для оператора goto. Все! Notes: Конечно array должна содержать, вызываемая функция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 16:46 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012Ну а если скажем case будет 30 штук, то для доступа к 29 по счету case, компилятор должен произвести 29 операций сравнения. За современные компиляторы не скажу, а 20 лет назад они генерировали таблицу переходов, так что switch работал вообще без сравнения. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 17:00 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Сложно себе представить рукотворный switch из 30 вариантов выхода. Возможно это был побочный продукт какого-нибудь Бизона. Кроме того на задачу можно посмотреть под другим углом. Сама анализируемая сущность в switch может иметь полиморфизм в методах и тогда задача решается по другому. Оператор варианта вообще уходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 17:04 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Сомневаюсь что оптимизаторы в компиляторах компилируют как в коде написано. Если интересно - затести скорость выполнения case 1 и case 30. Массив возможен если значения в case близкие, например 1,2,3. Но если 1,500,100500 то массив 100500 элементов получится. Наверно есть другие решения, бинарное дерево и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 17:07 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
maytonСложно себе представить рукотворный switch из 30 вариантов выхода. Обработка ошибок. Обработка сообщений, например оконные сообщения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 17:14 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Вот думаю для каких еще алгоритмических случаев можно было применить данный подход? PS: Может быть этот подход можно каким либо образом усовершенствовать? Например вместо индекса передавать ссылку на структуру, которая помимо индекса содержала дополнительные данные .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 17:22 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima TМассив возможен если значения в case близкие, например 1,2,3. Но если 1,500,100500 то массив 100500 элементов получится. Ну а зачем в качестве индекса передавать значение скажем равное 1500000? Думаю здесь проблемы нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 17:29 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
maytonСложно себе представить рукотворный switch из 30 вариантов выхода. Возможно это был побочный продукт какого-нибудь Бизона. Любое классическое Windows-приложение будет иметь и больше вариантов в switch. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 17:34 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Вот подумал как например этот подход применить например к обработки оконных сообщений? Похоже в этом случаем array должен содержать не только адреса переходов, но и код message. Ну а адрес для перехода ищем в array например бинарным способом ... PS: Вообще то хорошо бы эту идею обсудить и по результату написать или faq или можем быть даже воплотить разные варианты замены switch в виде какой-либо library ... Может возьмется кто? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 17:50 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012воплотить разные варианты замены switch в виде какой-либо library ...шаблоны проектирования Стратегия и Состояние отлично умеют заменять все эти switch одной красивой строчкой кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 17:54 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
egorychшаблоны проектирования Стратегия и Состояние отлично умеют заменять все эти switch одной красивой строчкой кода С ними не знаком. Так как вам они известны, то вот и вопрос. То что они одной строчкой решают вопрос это хорошо, но а как обстоит вопрос с их эффективностью по сравнению с предложенным способом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 17:58 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012Dima TМассив возможен если значения в case близкие, например 1,2,3. Но если 1,500,100500 то массив 100500 элементов получится. Ну а зачем в качестве индекса передавать значение скажем равное 1500000? Думаю здесь проблемы нет. Коды оконных сообщений виндовса. 100500 не будет, но десятки тысяч запросто. About Messages and Message Queues https://msdn.microsoft.com/en-us/library/windows/desktop/ff381405(v=vs.85).aspx ... Message-identifier values are used as follows: The system reserves message-identifier values in the range 0x0000 through 0x03FF (the value of WM_USER – 1) for system-defined messages. Applications cannot use these values for private messages. Values in the range 0x0400 (the value of WM_USER) through 0x7FFF are available for message identifiers for private window classes. If your application is marked version 4.0, you can use message-identifier values in the range 0x8000 (WM_APP) through 0xBFFF for private messages. The system returns a message identifier in the range 0xC000 through 0xFFFF when an application calls the RegisterWindowMessage function to register a message. The message identifier returned by this function is guaranteed to be unique throughout the system. Use of this function prevents conflicts that can arise if other applications use the same message identifier for different purposes. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 18:08 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012Вот подумал как например этот подход применить например к обработки оконных сообщений? Похоже в этом случаем array должен содержать не только адреса переходов, но и код message. Ну а адрес для перехода ищем в array например бинарным способом ... PS: Вообще то хорошо бы эту идею обсудить и по результату написать или faq или можем быть даже воплотить разные варианты замены switch в виде какой-либо library ... Может возьмется кто? Тут нечего ни обсуждать, ни воплощать, всё уже украдено до нас. Бери например MFC и читай код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 18:10 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012 wrote: >>С ними не знаком. рекомендую ознакомиться, а то ты их сейчас изобретаешь ))) Стратегия , Состояние , прошу любить и жаловать )) >>а как обстоит вопрос с их эффективностью по сравнению с предложенным способом? вызов виртуальной функции, по сути - это тоже самое, что ты предлагаешь, только из коробки, потому что таблицу виртуальных функций за тебя построит компилятор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 18:10 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Я так понимаю что это пятница. Ну что-ж. Начнём. Можно запилить хеш-табличку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 18:12 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima TКоды оконных сообщений виндовса. 100500 не будет, но десятки тысяч запросто. Так выше в messages вроде мной приведен подход к обработке кодов например оконных сообщений ... По идее он будет более эффективным чем череда case. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 18:14 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
egorychвызов виртуальной функции, по сути - это тоже самое, что ты предлагаешь Да нет. Переход по адресу виртуальной функции это тот же самый case ... Во время run-time переход к виртуальной функции производится поиском в таблице нужной ... PS: Конечно неплохо было бы потестить Стратегия, Состояние и предложенный подход в плане производительности. Ну а если скажем какая либо функция содержит swith в цикле. Как по мне предложенный подход оптимизирует цикл /в части использования switch/ ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 18:24 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012Dima TКоды оконных сообщений виндовса. 100500 не будет, но десятки тысяч запросто. Так выше в messages вроде мной приведен подход к обработке кодов например оконных сообщений ... По идее он будет более эффективным чем череда case. Он не будет более эффективен, чем case, поскольку case оптимизируется компиляторами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 18:30 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012egorychвызов виртуальной функции, по сути - это тоже самое, что ты предлагаешь Да нет. Переход по адресу виртуальной функции это тот же самый case ... Во время run-time переход к виртуальной функции производится поиском в таблице нужной ... Нет, это косвенный вызов. Никаких поисков там нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 18:30 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
egorychрекомендую ознакомиться, а то ты их сейчас изобретаешь ))) Стратегия , Состояние , прошу любить и жаловать )) Без обид ... "Шоб у тебя в программе было 15 шаблонов Стратегия и 30 шаблонов Состояние ..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 18:33 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
MasterZivОн не будет более эффективен, чем case, поскольку case оптимизируется компиляторами. Расскажи как ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 18:35 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012Dima TКоды оконных сообщений виндовса. 100500 не будет, но десятки тысяч запросто. Так выше в messages вроде мной приведен подход к обработке кодов например оконных сообщений ... По идее он будет более эффективным чем череда case. Ты про бинарный поиск? Его при компиляции можно реализовать. по сути switch() выраждается в конструкцию типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. строка типа Код: plaintext 1. компилируется в одну команду процессора, если не путаю, может в две. при большом количестве переходов можно превратить в бинарное дерево, типа такого Код: plaintext 1. 2. 3. 4. 5. 6. причем это будет эффективнее чем обычный бинарный поиск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 18:47 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima T++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 18:49 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012"Шоб у тебя в программе было 15 шаблонов Стратегия и 30 шаблонов Состояние ..."уверяю тебя, что это лучше, чем иметь 45 свичей для тех же целей. Хотя... если платят за строчку кода, то подход со свичами - самый подходящий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 18:49 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima Tпри большом количестве переходов можно превратить в бинарное дерево, типа такого Код: plaintext 1. 2. 3. 4. 5. 6. Как вариант ... Еще один на мой взгляд довод в полезность предложенного подхода. Переход к участку кода путем выборки адреса перехода + выполнения оператора goto сам по себе "минималичен" ..., а вот обвязка к решению этого вопроса с использованием классов и виртуальных функций безусловно потребует больших накладных расходов ... PS: Ну что Dima может проверишь? Ты у нас самый работящий, а мы ленивые только сидим с попкорном и читаем твои posts ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 19:18 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
egorychХотя... если платят за строчку кода, то подход со свичами - самый подходящий А знаешь почему у Маяковского стихи в печатном виде выглядят так: "Вот и вечер в ночную жуть ушел от окон, хмурый, декабрый. В дряхлую спину хохочут и ржут канделябры. ... ... " ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 19:22 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012PS: Ну что Dima может проверишь? Чего проверишь? Компилятор написать Я тебе написал как на мой вгляд можно откомпилировать switch() в бинарное дерево. Компиляторы пишут дядьки поумнее меня, может там еще какие оптимизации посеръезнее используются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 19:28 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima TЯ тебе написал как на мой вгляд можно откомпилировать switch() в бинарное дерево. Компиляторы пишут дядьки поумнее меня, может там еще какие оптимизации посеръезнее используются. Ни кто и не говорит, что нужно разбираться с премудростями компилятора. Пиши одну функцию, которые в цикле крутит switch с 50 case, а другая использует area и переход с помощью goto ... Если разницы во времени выполнения не будет ни какой, то и обсуждать нечего. Также не плохо бы получить время и при использовании шаблонов Стратегия и Состояние ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 19:38 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Ты придумал - ты и пиши. Мне оно зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 19:42 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
egorychшаблоны проектирования Стратегия и Состояние отлично умеют заменять все эти switch одной красивой строчкой кода. Кстати при предложенном мной подходе будет также использована одна строка в программе ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 19:46 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012Ни кто и не говорит, что нужно разбираться с премудростями компилятора. Запустить g++ -S - совсем никакая премудрость. Вот код: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Вот результат в ассемблере: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 19:46 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЗапустить g++ -S - совсем никакая премудрость. С g++ не знаком. Надеюсь приведенный тобой код является результатом оптимизации ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 19:49 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012 Ни кто и не говорит, что нужно разбираться с премудростями компилятора. Пиши одну функцию, которые в цикле крутит switch с 50 case, а другая использует area и переход с помощью goto ... Для правильных замеров первую надо писать на Си, чтобы замерить как компилятор оптимизирует, а вторую на асме, т.к. хз во что такую конструкцию компилятор превратит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 19:52 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima Tа вторую на асме, т.к. хз во что такую конструкцию компилятор превратит. Зачем на асме? Оно нам надо? "Нам денег не надо - нам время подай" ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 19:54 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012Dima Tа вторую на асме, т.к. хз во что такую конструкцию компилятор превратит. Зачем на асме? Оно нам надо? "Нам денег не надо - нам время подай" ... Затем что асм это команды процессору в чистом виде. Если хочешь правильного сравнения эффективности работы компилятора с собственным "идеальным" решением, то надо свое на асме писать. Если что - я на асме писать не умею. Точнее баловался в студенчестве, но с тех пор очень много чего поменялось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 20:02 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima TЕсли хочешь правильного сравнения эффективности работы компилятора с собственным "идеальным" решением, то надо свое на асме писать Это для "идеального" решения, а для обыденного один тест с switch, а ниже тест с area и goto /на обычном C/. Не плохо бы замеры сделать и для C++ для сравнения с предложенными шаблонами ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 20:07 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
"Я волком бы выгрыз шаблоны все. К шаблонам почтения нету. К любой простоте в программе катись и будет ей радость. От этого ... " ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 20:27 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012С g++ не знаком. Так пойди и познакомься. А до тех пор... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 20:49 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012 Это для "идеального" решения, а для обыденного один тест с switch, а ниже тест с area и goto /на обычном C/. Работу предлагаешь? Предлагай оплату. У меня своих бредовых нерешенных задач куча. Например: Код: plaintext 1. выполняется 50 сек по сетке 100 мбит (table.dbf весит 0,5 Гб) Код: plaintext 1. выполняется 10 сек Код: plaintext 1. выполняется 5 сек. Задача: надо сделать так чтобы первый запрос работал не более 1 сек. Есть мысли как сделать, надо тестить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 21:01 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТак пойди и познакомься. А до тех пор.. Вполне возможно, что и приду к g++... А пока проза жизни /указания моего начальника/ требует, чтобы настроил VM под CentOS и чтобы можно было в ней ... ... ... ... Вообщем то по молодости лет 7 занимался Linux /Alt Linux, Debian, Slackware/. Так что наверное как раз и до g++ дело дойдет ... /поражаюсь твоей проницательности/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 21:02 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima TРаботу предлагаешь? Забудь о моих словах как об страшном сне ... PS: Сегодня пятница ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 21:04 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima TЗадача: надо сделать так чтобы первый запрос работал не более 1 сек. Dimitry Sibiryakov уже прочитал об твоих проблемах ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 21:07 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012Вполне возможно, что и приду к g++... Кстати, ты не поверишь, но MSVC генерирует ассемберный код даже лучше чем GCC. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 21:15 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Оба. Вдохните глубоко. Пятница... и скипетр власти жжёт мне руку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 21:29 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012Dima TЗадача: надо сделать так чтобы первый запрос работал не более 1 сек. Dimitry Sibiryakov уже прочитал об твоих проблемах ... Думаешь решать сразу бросился? Если что - задача не решаема в той постановке как я ее описал. Но есть ньюансы, которыми можно воспользоваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 21:37 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima TДумаешь решать сразу бросился? Надо тебе польстить немного, а то ты немного что-то на меня опечалился ... PS: Вот вспомнил о том какой ты труд приложил для достижения поставленной цели ... http://www.sql.ru/forum/1149455-1/generator-prostyh-chisel-do-10-9-za-5-sek ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 21:50 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima TЗадача: надо сделать так чтобы первый запрос работал не более 1 сек. Ну так вспомни об RPC, DCOM, Веб-сервисах, ... ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2015, 21:56 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
О чем вообще спор-то? Как выше неоднократно было сказано, все компиляторы оптимизируют большие switch в таблицы переходов. Программисту никогда не нужно это делать вручную. Все. Тема закрыта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2015, 05:59 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2015, 07:31 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyКак выше неоднократно было сказано, все компиляторы оптимизируют большие switch в таблицы переходов Да ну ... Ну так обрати внимания на ссылку приведенную ниже твоего post ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2015, 08:48 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Предложенный мной способ предполагает что программа и вызываемая функция придерживаются определенного логического интерфейса при котором expression для switch - index для области area, содержащей таблицу переходов. Компилятор не сможет так оптимизировать, потому что синтаксис исходного текста не несет в себе информацию об expression более того, какого она типа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2015, 08:58 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012Да ну ... Ну так обрати внимания на ссылку приведенную ниже твоего post .. По той ссылке написано то же самое что я сказал, только помимо этого приведены варианты реализации и маленьких наборов, которые оптимизируются по-другому. В целом, любые попытки реализовать более эффективный switch на уровне исходного кода, а не компилятором, не приведут к чему кроме нечитабельного кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2015, 09:06 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012Предложенный мной способ Приведите 1) код с switch, 2) эквивалентный код с вашим способом 3) замеры скорости Пока этого всего нет и говорить не о чем. Мое предсказание - никакие "способы" не будут быстрее встроенного switch. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2015, 09:11 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyПо той ссылке написано то же самое что я сказал, только помимо этого приведены варианты реализации и маленьких наборов, которые оптимизируются по-другому. Там идет речь об оптимизации дерева переходов ... ..., а в предложенном способе имеем один array с ссылками и один goto. Почувствуй разницу ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2015, 09:14 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012Почувствуй разницу .. Не могу почувствовать пока не предоставлены замеры скорости ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2015, 09:16 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyНе могу почувствовать пока не предоставлены замеры скорости Да ты прав. "Шас спою" ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2015, 09:22 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Интересно что в топике никто не обратил внимание на вероятности срабатывания кейсов. Это особенно касается трансляторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2015, 09:31 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
maytonИнтересно что в топике никто не обратил внимание на вероятности срабатывания кейсов. Ok! В тесте switch значение expression будет выбираться с использованием random. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2015, 11:30 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Ты наверное не понял мою мысль. При разработке синтаксических трансляторов один кейс может срабатывать в 97% случаев, другой в 2% а все остальные кейсы делят оставшися 1% (к примеру). Поэтому задача "умной" оптимизации (если ты хочешь таковую получить) должна базироваться на том что мы знаем гистограмму данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2015, 12:17 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Не сдаюсь ... C Programming: address of a label http://stackoverflow.com/questions/1777990/c-programming-address-of-a-label?rq=1 "... The C and C++ standards do not support this feature. However, the GNU Compiler Collection (GCC) includes a non-standard extension for doing this ..." PS: "Но все таки она вертится" ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2015, 16:10 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012PS: Вот вспомнил о том какой ты труд приложил для достижения поставленной цели ... http://www.sql.ru/forum/1149455-1/generator-prostyh-chisel-do-10-9-za-5-sek Тому причина была хреновая погода, делать нечего, съездить на природу некуда ... вобщем в октябре-ноябре обращайся, буду бездельничать - поучавствую в любых бесполезных исследованиях. Чем мы хуже британских ученых? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2015, 16:32 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima TТому причина была хреновая погода, Вообщем займусь ка VM под CentOS. И вот в ней, то и проведу замеры под gcc. PS: "Наши руки не для скуки ..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2015, 16:43 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Решил проверить известный факт о расположении условий по убыванию вероятности появления(по-моему о нём выше упомянул Марк). В данном коде пробовал менять case 31, но у меня получаются странные результаты. Потому маловероятно что они правдивые. Вечером на ноутбуке проверю. С точки зрения логики я придерживаюсь мнения о том, что есть смысл располагать кейсы в порядке убывания вероятности. Но вероятнее прав окажется Анатолий. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. Владимир2012И так программа в качестве expression должна передавать номер индекса к какому-либо array, содержащему адреса точек перехода для оператора goto. Все! Владимир2012, приведите пожалуйста пример предложенного вами способа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 03:16 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
бинарный инкремент в коде выше лучше заменить на унарную операцию ++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 03:18 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
SashaMercuryбинарный инкремент в коде выше лучше заменить на унарную операцию ++. Это еще более смешное утверждение чем тема данного топика ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 03:47 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryбинарный инкремент в коде выше лучше заменить на унарную операцию ++. Это еще более смешное утверждение чем тема данного топика Разве Код: plaintext 1. не медленне чем Код: plaintext 1. ? И это не утверждение, а пожелание для минимизации побочного времени ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 03:57 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
SashaMercuryРазве Код: plaintext 1. не медленне чем Код: plaintext 1. ? Нет конечно. В стандарте языка (как С так и С++) нет требований, чтобы одно было быстрее другого. Поэтому фактическая скорость зависит от того как компилятор реализует их )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 04:19 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Странно. Совершенно точно помню что мне говорили о том, что унарный оператор выполняется быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 04:23 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Ну да ладно. Это было только предложение и не относится к теме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 04:23 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryРазве Код: plaintext 1. не медленне чем Код: plaintext 1. ? Нет конечно. В стандарте языка (как С так и С++) нет требований, чтобы одно было быстрее другого. Поэтому фактическая скорость зависит от того как компилятор реализует их )) а реализуются они почти наверняка одинаково. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 07:41 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
А вообще, да, Анатолий прав, тема смешна до жути. Производительность приложения вообще очень редко определяется скоростью работы одного оператора. Важнее в тысячу раз применяемые алгоритмы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 07:45 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
MasterZivAnatoly Moskovskyпропущено... Нет конечно. В стандарте языка (как С так и С++) нет требований, чтобы одно было быстрее другого. Поэтому фактическая скорость зависит от того как компилятор реализует их )) а реализуются они почти наверняка одинаково. В MSVC по разному. Недавно смотрели: ++ компилируется как INC, а +=1 как ADD. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 08:00 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima TMasterZivпропущено... а реализуются они почти наверняка одинаково. В MSVC по разному. Недавно смотрели: ++ компилируется как INC, а +=1 как ADD.А как смотрели? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 09:16 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
m_SlaDima Tпропущено... В MSVC по разному. Недавно смотрели: ++ компилируется как INC, а +=1 как ADD.А как смотрели? В MSVC отладчике. Брэйкпоинт и потом правая кнопка "Goto disassembly" Вот тот пост 17428235 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 09:26 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima Tm_Slaпропущено... А как смотрели? В MSVC отладчике. Брэйкпоинт и потом правая кнопка "Goto disassembly" Вот тот пост 17428235 не сильно я встроенным дизассемблерам доверяю, IDA на exe понадежнее будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 09:48 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
m_Slaне сильно я встроенным дизассемблерам доверяю а дизассембер то зачем? ключики получения ассемблерного порождения никто не отменял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 10:25 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Последний исходник вообще вызывает удивление. Он алгоритмически сворачивается к проверке на диапазон от 1 до 31 (для целых). И если компиллятор способен объединять похожие ветки то этот "switch(){}" должен вырождаться в один "if {}". Вобщем дайте больше энтропии мать ее так. Больше энтропии.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 11:10 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
maytonесли компиллятор способен объединять похожие ветки то этот "switch(){}" должен вырождаться в один "if {}". Но в данном случае он вырождается в переход по таблице, как я уже показал в начале темы. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 11:17 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Провёл два теста. Второй вариант, когда 31 проверяется изначально более устойчивый. Обратите внимание что время примерно одинаково на всех 10 тестах для данного случая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:14 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
А в данном случае все по порядку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:15 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПровёл два теста. Хорошо бы код... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:19 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Провал возможно из-за того что у тебя параллельно какой-то расчет тяжелый запущен. Смотри диспетчером задач - кто проц использует. Ты в Debug или Release компилируешь? Debug в MSVC без оптимизации, т.е. компилируется буква в букву как ты написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:22 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
MasterZivSashaMercuryПровёл два теста. Хорошо бы код... Не сильно изменил первую версию :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:25 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Тут из-за лени вместо редкой записи в переменную t Код: plaintext 1. Мы получаем регулярную запись в t. Не знаю как компиллятор это соптимизирует. Возможно так и не будет. Но я-бы не делал лишний раз тернарную операцию там где раньше мы обходились простой проверкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:30 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
а вот release. Может и правда слабая энтропия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:30 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
SashaMercury, давай вместо цыфирей - поток английского текста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:31 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Саш, добавь энтропии, твой код. Это Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Компилируется как Код: plaintext 1. хотя бы прибавляй не 1, а разные значения. И в case можно не подряд значения взять. кстати тут +=1 в INC откомпилировалось. Еще у тебя в case 29: пропущен break. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:40 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
нашел ассемблерную команду, которой переход делается Код: plaintext 1. Т.е. по адресу TableAddress таблица адресов куда переходить для каждого значения case. Т.е. без разницы на каком месте твой case и сколько case используется. Но если добавить case 1234567890: то он его будет проверять отдельно перед JMP, т.е. при наличии дыр в значениях case будет больше проверок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:56 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima T, у него Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 13:56 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
JMP - самая полезная в мире команда процессора. Мы любим ее... Мы ценим.. И никогда от нее не откажемся. [здесь должен быть тролфейс с глазами полными слёз но я нихера его не могу найти] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 14:13 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Доказано, таблица переходов есть и оптимизировать некуда. Разве что конкретно этот switch() заменить на массив: Код: plaintext 1. 2. так вдвое быстрее. PS Саш, провалы в твоих замерах могли быть из-за защиты от перегрева проца твоего ноута или наоборот из-за переключений проца в форсированный режим, или от желания поберечь заряд аккума. У тебя ноут от батарейки работает или от сети? Во время подобных замеров втыкай в розетку, чтобы батарейку не экономил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 14:14 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
У него отклонение не более 3%. Я-бы даже не анализировал такое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 14:19 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Dima TСаш, добавь энтропии, твой код. Это Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Компилируется как Код: plaintext 1. хотя бы прибавляй не 1, а разные значения. И в case можно не подряд значения взять. кстати тут +=1 в INC откомпилировалось. Еще у тебя в case 29: пропущен break.Согласен с этим. По существу теста как такового и не было ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 14:28 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Вот где-бы я пилил энтропийный автомат. Так это в XML-парсере "ручного изготовления". Пример. Чортовы угловые скобки флудят как ненормальные. На графе состояний - это просто кластер. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 14:29 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
maytonУ него отклонение не более 3%. Я-бы даже не анализировал такое. Сначала побольше было 17655105 , но там он в дебаге компилировал, судя по цифрам молотило две минуты. За это время железо могло адаптацию под нагрузку начать. Затестил: debug тоже в JMP DWORD PTR компилирует switch() Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 14:31 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Ага... вместо сложения с 100 можно сделать 100 инкрементов. (Индусы радостно закивали головами ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 14:32 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
SashaMercuryа вот release. Может и правда слабая энтропия А что с чем сравнивалось-то ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 14:34 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Илья, в первом случае кейс на сравнение с 31 был на первом месте, во втором кейсы были упорядочены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 15:09 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
sln, который использовал для тестов. Но вторую часть теста /area + goto не осилил/. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 15:13 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Sorry /архив не приложил/ sln, который использовал для тестов. Но вторую часть теста /area + goto не осилил/. PS: Для C есть такая штуковина: <setjmp.h> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 15:17 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Коллеги. Напоминаю что скриншот windows-консоли нет смысла делать. Вы можете средствами Windows эффективно "скопировать прямоугольник" текста и вставить его в форум. Экономьте нефть и TCP-пакеты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 15:33 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Скажу больше - есть отдельный пункт меню "Копировать всё", который захватывает даже то, чего нет на экране. Лишь бы оно поместилось в (оконный) буфер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 16:28 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012sln, который использовал для тестов. Но вторую часть теста /area + goto не осилил/. простите, это ваш код ? Доделывайте вторую часть. Ваша идея, вот и покажите работает или нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 02:30 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДоделывайте вторую часть. Ваша идея, вот и покажите работает или нет В VS нету поддержки получения адресов меток, чтобы инициализировать ими массив переходов. Поэтому вместо красивого однострочника придется городить тонны инлайн ассемблера. Не каждый осилит. Гггггг)) Хинт: в gcc такая поддержка есть, так же как и goto по вычисленному адресу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 05:22 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012Sorry /архив не приложил/ sln, который использовал для тестов. Но вторую часть теста /area + goto не осилил/. mingw switch выкинул полностью, т.к. переменные i11, i2355 ... ни где не используются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 06:05 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
SashaMercuryпростите, это ваш код ? Ностальгия ... В начале 90-х когда еще был Foxpro 2.5 /даже не 2.6/ и компьютера был с MSDOS с 1MB памяти ... В одной организации было много терминальных станций и каждая из них была подключена к отдельному компьютеру /кстати Amstrad на 16 Mgz стоил столько, что можно было купить три волги .../. Предложил одной Госконторе, что обеспечу им работу 4-х операторов с одним ПК /система подготовки данных/ ... Ближе к делу - через 1.5 месяца они уже работали. Но хотел бы отметить какие вопросы были решены: - написал libray, поддерживающую работу с idx /описаний формата этого индексного файла понятно ни где не было .../. - library для работы dbf; - grid, который динамически формировался на основе meta данных об редактируемых полях ... - обеспечил 100% поддержку Foxpro шаблона для форматирования данных ... ... ... Так вот контактировал с некоторыми программистами. И когда один из них вытроллил из меня исходники, то сказал мне, что я врун, в жизни такого не сделаю /и многое более/ ... PS: SashaMercury, что же ты необычного увидел в этом исходнике, что задал такой вопрос? После получения денег купил AT 286 20Mgz, 1MB, hdd 40Mb ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 08:08 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
Владимир2012/описаний формата этого индексного файла понятно ни где не было .../. плохо искал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 08:29 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
ИзопропилВладимир2012/описаний формата этого индексного файла понятно ни где не было .../. плохо искал Прошу обратить внимание что Владимир пишет про 90-е. В СНГ эти ваши интернеты пришли в 1996-97 году как услуга которую предоставляли телефонные операторы. ЕМНИП. А я в эти 97-е получал инфу "дискетками" из лабораторий причём чаще всего находил случайно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 11:13 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
maytonПрошу обратить внимание что Владимир пишет про 90-е. В СНГ эти ваши интернеты пришли в 1996-97 году как услуга которую предоставляли телефонные операторы. ЕМНИП. А я в эти 97-е получал инфу "дискетками" из лабораторий причём чаще всего находил случайно. Да, но формат файлов FoxPro, включая idx, был описан в бумажной документации, которая к нему прилагалась. Но таки да, для этого надо было использовать лицензионную копию. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 11:34 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
В начале 90-х когда еще был Foxpro 2.5 /даже не 2.6/ и компьютера был с MSDOS с 1MB памяти ... Я на 2.0 начинал... - написал libray, поддерживающую работу с idx /описаний формата этого индексного файла понятно ни где не было .../. - library для работы dbf; Вообще-то была достаточно распространённая библиотека для C для этого дела. Поддерживала ВСЕ форматы .dbf и все виды индексов. Забыл только как называлась. Мы на ней приложение какое-то писали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 11:59 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
MasterZivЯ на 2.0 начинал... Раз пошла такая пьянка ... Начинал с Foxbase. До этого много поработал c M6000, CM-1M, CM-2M, ТВСО /разрабатывали системы управления реального времени/ ЕС-1045 /Assembler, PL1, РПГ, .../ и администрированием их занимался /так что MSDOS лет на 5 раньше увидел до ее появления. MSDOS много слямзила у IBM. Да и многое было в ней от СВМ (система виртуальных машин)/. PS: А еще хорошо знаю PIC и программирование под них /но то что сейчас разрабатываю на порядок круче всех моих предыдущих разработок Dimitry Sibiryakov в курсе об моих планах .../ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 12:20 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
maytonПрошу обратить внимание что Владимир пишет про 90-е. В СНГ эти ваши интернеты пришли в 1996-97 году как услуга которую предоставляли телефонные операторы. ЕМНИП. я про конец 80-х без интернетов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 12:26 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
MasterZivВ начале 90-х когда еще был Foxpro 2.5 /даже не 2.6/ и компьютера был с MSDOS с 1MB памяти ... Я на 2.0 начинал... - написал libray, поддерживающую работу с idx /описаний формата этого индексного файла понятно ни где не было .../. - library для работы dbf; Вообще-то была достаточно распространённая библиотека для C для этого дела. Поддерживала ВСЕ форматы .dbf и все виды индексов. Забыл только как называлась. Мы на ней приложение какое-то писали. http://www.qbssoftware.com/products/CodeBase/overview/_prodCODEBASE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 17:54 |
|
||
|
Аналог switch, но более эффективный
|
|||
|---|---|---|---|
|
#18+
ЗимарглMasterZivВ начале 90-х когда еще был Foxpro 2.5 /даже не 2.6/ и компьютера был с MSDOS с 1MB памяти ... Я на 2.0 начинал... - написал libray, поддерживающую работу с idx /описаний формата этого индексного файла понятно ни где не было .../. - library для работы dbf; Вообще-то была достаточно распространённая библиотека для C для этого дела. Поддерживала ВСЕ форматы .dbf и все виды индексов. Забыл только как называлась. Мы на ней приложение какое-то писали. http://www.qbssoftware.com/products/CodeBase/overview/_prodCODEBASE Точно, оно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 19:05 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2018778]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
144ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 227ms |

| 0 / 0 |
