Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.15;
Скачать: CL | DM;

Вниз

case n of   Найти похожие ветки 

 
tButton ©   (2008-05-05 01:41) [0]

просто любопытно, при компиляции  структуры case ... of генерируется набор условных переходов или как-то иначе?


 
Германн ©   (2008-05-05 02:02) [1]


> tButton ©   (05.05.08 01:41)
>
> просто любопытно, при компиляции  структуры case ... of
> генерируется набор условных переходов или как-то иначе?
>

Напиши, откомпилируй и посмотри.


 
tButton ©   (2008-05-05 02:22) [2]


> Напиши

не проблема
> откомпилируй

не проблема
> посмотри

не проблема

но только я все равно не пойму то, что увижу =)


 
No_Dead ©   (2008-05-05 02:40) [3]

> все равно не пойму то, что увижу

значит декомпилируй:)


 
DrPass ©   (2008-05-05 03:36) [4]


> просто любопытно, при компиляции  структуры case ... of
> генерируется набор условных переходов или как-то иначе?

Насколько знаю, по возможности Delphi старается строить таблицу переходов - чтобы сразу по значению было можно определить, куда прыгать без кучи последовательных сравнений


 
tButton ©   (2008-05-05 03:37) [5]

логично...


 
Riply ©   (2008-05-05 06:06) [6]

>  [4] DrPass ©   (05.05.08 03:36)
> Насколько знаю, по возможности Delphi старается строить таблицу переходов - чтобы
> сразу по значению было можно определить, куда прыгать без кучи последовательных сравнений

Вроде, где-то читала, что при "сортированных" значениях case работает значительно быстрее.
К сожалению не могу вспомнить где именно читала, а Delphi нет под рукой, чтобы посмотреть.


 
Восхищенный   (2008-05-05 15:56) [7]

> Riply ©   (05.05.08 06:06) [6]

> не могу вспомнить где именно читала

В любой серьезной книжке по Паскалю.


 
Ketmar ©   (2008-05-05 16:17) [8]

> Вроде, где-то читала, что при «сортированных» значениях
> case работает значительно быстрее.

не факт, что оно само не сортирует. по крайней мере раньше с построением каких-то внутренних таблиц для case был связан чудный баг в компиляторе — опо сжирало всю память, потом весь своп и взрывалось (говорят, после D7 починили). отсюда можно предположить, что и сортировать не проблема — дел-то ветки в AST подвигать.

зыж нет, проверить не могу.


 
TUser ©   (2008-05-06 08:41) [9]

procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
begin
 i := StrToInt (Edit1.Text);
 case i of
   1: showmessage("1");
   2: showmessage("2");
   3: showmessage("3");
   4: showmessage("4");
   5: showmessage("5");
   6: showmessage("6");
   7: showmessage("7");
   8: showmessage("8");
   9: showmessage("9");
   end;
end;


Оптимизирует он, однако. Этот код скомпилился так - сначала проверяется, что меньше 10, потом в зависимости от i вычисляется адрес, куда прыгать. Delphi7.


 
tButton ©   (2008-05-06 11:13) [10]

т.е. примерно так?
10 if i>9 goto 130
11 if i<1 goto 130
20 x = i * 10 + 30
30 goto x
40 showmessage("1");
50 showmessage("1");
60 showmessage("1");
...
130 end


 
TUser ©   (2008-05-06 17:47) [11]

ага


 
tButton ©   (2008-05-07 00:37) [12]

и поэтому дельфийский case не работает со строками?


 
Palladin ©   (2008-05-07 00:48) [13]

не делфийский, а паскалевский как таковой


 
Anatoly Podgoretsky ©   (2008-05-07 01:24) [14]

> tButton  (07.05.2008 00:37:12)  [12]

Зато IF работает, а case это частный случай, специализированый. Вместо него бы лучше если был бы switch, а так просто лишняя сущность.


 
DrPass ©   (2008-05-07 01:28) [15]


> Вместо него бы лучше если был бы switch, а так просто лишняя
> сущность

switch так красиво не оптимизируется. А кроме того, его функциональность явно избыточна


 
tButton ©   (2008-05-07 01:41) [16]

> Palladin ©   (07.05.08 00:48) [13]
тут где-то рядом проскакивала информация что паскалевский он был до 7й версии дельфи. но в принципе да. паскалевский.

> Anatoly Podgoretsky ©   (07.05.08 01:24) [14]
в принципе можно написать препроцессор, который будет интерпретировать switch в набор if.

немного тезисов:
* значит все-таки switch преобразуется в набор условных переходов?
а case можно рассматривать как частный случай switch.

* а если case"ом проверяются непоследовательные значения?

* будет ли целесообразным применять циклы для перебора условий?


 
Anatoly Podgoretsky ©   (2008-05-07 07:48) [17]

> DrPass  (07.05.2008 01:28:15)  [15]

Не тот swich, который в С, а тот swich, который переход по таблице. Для значений от 0 до N - 1
Очень быстрая операция.



Страницы: 1 вся ветка

Текущий архив: 2008.06.15;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
2-1211319869
ply
2008-05-21 01:44
2008.06.15
соединение с БД из любой формы


2-1211292635
Stif
2008-05-20 18:10
2008.06.15
Реестр


9-1171341313
ryryr
2007-02-13 07:35
2008.06.15
Puzzle


15-1209657757
NaRuTo
2008-05-01 20:02
2008.06.15
Bink32.dll


15-1209896296
Polevi
2008-05-04 14:18
2008.06.15
Отправить файл веб-сервису