Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.06.15;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
8-1182159165
TheBug
2007-06-18 13:32
2008.06.15
Странный косяк с палитрой у TBitmap


2-1211309644
framez
2008-05-20 22:54
2008.06.15
Окна


2-1211459010
User1
2008-05-22 16:23
2008.06.15
Action Manager


15-1209529452
@!!ex
2008-04-30 08:24
2008.06.15
Как испоганить исходник??


15-1209715515
Slider007
2008-05-02 12:05
2008.06.15
С днем рождения ! 2 мая 2008 пятница





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский