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

Вниз

Орешник отдыхает.   Найти похожие ветки 

 
Kerk ©   (2004-10-19 14:50) [0]

Разбираю я исходник. Там вот такой шедевр:
inline Void SetTrueIfFalse(Boolean &variable) {
   if (!variable) variable = true;
}


Смотрю на это и чувствую, что можно оптимальнее сделать.
Минут 5 медитировал. Когда дошло КАК съоптимизировать это....
в общем давно я так истерически не смеялся... :))))


 
clickmaker ©   (2004-10-19 14:54) [1]

Хм... Боюсь показацца тупым, но что тут можно соптимизировать?


 
DiamondShark ©   (2004-10-19 14:57) [2]


> но что тут можно соптимизировать?

Да, практически, всё ;)


 
Anatoly Podgoretsky ©   (2004-10-19 14:58) [3]

clickmaker ©   (19.10.04 14:54) [1]
variable = true;


 
Alex_Bredin ©   (2004-10-19 15:00) [4]

if (!variable) - лишнее


 
Ega23 ©   (2004-10-19 15:01) [5]

Не, ну можно
variable = variable xor false;


 
clickmaker ©   (2004-10-19 15:02) [6]

вот над таким я бы посмеялся

inline Void SetTrueIfFalseAndFalseIfTrue(Boolean &variable) {
  if (!variable) variable = true;
  else variable = false;
}

а так, все равно компилятор, увидев inline, всунет в код вместо вызова строку
if (!variable) variable = true;

вполне пристойный фрагмент кода, на мой взгляд


 
Kerk ©   (2004-10-19 15:03) [7]

Там эта функция отовсюду вызывается... LOL :)))))


 
clickmaker ©   (2004-10-19 15:06) [8]


> [3] Anatoly Podgoretsky ©   (19.10.04 14:58)
> clickmaker ©   (19.10.04 14:54) [1]
> variable = true;

ну вообще, в данном случае, согласен.
Однако могут быть варианты, когда проверка условия займет меньше времени, чем установка значений


 
Ega23 ©   (2004-10-19 15:06) [9]

Ega23 ©   (19.10.04 15:01) [5]

Нет, так не правильно...


 
DiamondShark ©   (2004-10-19 15:11) [10]


> а так, все равно компилятор, увидев inline, всунет в код
> вместо вызова строку
> if (!variable) variable = true;
>
> вполне пристойный фрагмент кода, на мой взгляд

if там нафига?
Можно указать, в каком случае после выполнения этого кода переменная получит значение, отличное от true?


 
Kerk ©   (2004-10-19 15:15) [11]


> Можно указать, в каком случае после выполнения этого кода
> переменная получит значение, отличное от true?

Вот интересно в чью больную голову пришло реализовывать variable = true как inline-функцию, причем еще и с if-ом.. :)))


 
Ega23 ©   (2004-10-19 15:21) [12]

Kerk ©   (19.10.04 15:15) [11]

Ну есть такое понятие, как стиль. У меня вот начальник всегда пишет
if (variable = true) then ....
На вопрос "Почему?" отвечает - "Привычка".


 
SammIk ©   (2004-10-19 15:22) [13]

xor eax,eax
inc eax
mov [esp+4],eax
Может так быстрее будет?


 
clickmaker ©   (2004-10-19 15:24) [14]


> [11] Kerk ©   (19.10.04 15:15)
> Вот интересно в чью больную голову пришло реализовывать
> variable = true как inline-функцию, причем еще и с if-ом..
> :)))

Зато каменты писать не пришлось: название функции все объясняет :))


 
DiamondShark ©   (2004-10-19 15:28) [15]

Я всегда не доверял этому Ц...


 
Игорь Шевченко ©   (2004-10-19 16:52) [16]

DiamondShark ©   (19.10.04 15:28) [15]


> Я всегда не доверял этому Ц...


http://www.rsdn.ru/forum/Message.aspx?mid=858629&only=1

;)


 
Alex*   (2004-10-19 18:07) [17]

Не понимаю над чем смеяться, нравится атору пусть так пишет, а кому не нравится пусть переделываю на свой лад


 
VMcL ©   (2004-10-19 19:21) [18]

>>Kerk ©  (19.10.04 14:50)

Это цветочки. Мне вот такой код в одном VB.NET"ом проекте встречался, причем в нескольких местах:

If bReturn = True Then
   Return True
Else
   Return False
End If


 
Verg ©   (2004-10-19 19:26) [19]


> Kerk ©   (19.10.04 14:50)
> Разбираю я исходник. Там вот такой шедевр:
> inline Void SetTrueIfFalse(Boolean &variable) {
>    if (!variable) variable = true;


Ну дык задефайни ее

#define SetTrueIfFalse(n) { n = true; }


 
Verg ©   (2004-10-19 19:27) [20]

да, и почему Boolean? Почему не bool?


 
Marser_t   (2004-10-19 19:27) [21]

Сильно. Подобное бывает, когда пишешь "на автомате", не думая. "Автомат", он подводит, случается :-)


 
ZDima ©   (2004-10-19 21:19) [22]

Прикольно.
А ещё так можно
function SetTrueIfFalseAndFalseIfTrue(value:boolean):boolean;
begin value:=not value; end;


 
Kerk ©   (2004-10-25 12:56) [23]


> Verg ©   (19.10.04 19:27) [20]
> да, и почему Boolean? Почему не bool?

Потому что .NET

> ZDima ©   (19.10.04 21:19) [22]
> Прикольно.
> А ещё так можно
> function SetTrueIfFalseAndFalseIfTrue(value:boolean):boolean;
> begin value:=not value; end;

Хм.. сильная идея. :))))


 
}|{yk ©   (2004-10-25 13:07) [24]

Операция присваивания занимает больше процессорного времени, чем операция сравнения. Таким образом в результате выполнения данной функции присваивание будет выполняться только в 50% случаем, потому данный код есть оптимальным (переведи его на asm, поймешь)


 
Kerk ©   (2004-10-25 13:11) [25]


> }|{yk ©   (25.10.04 13:07) [24]

перевел.
or eax,eax
jnz @@go
mov eax,1
.align 4
@@go:

против:
mov eax,1

ну вообще тут нужно такты считать.


 
Kerk ©   (2004-10-25 13:12) [26]

Кстати, надо еще учесть предсказание переходов.. так что не все так просто.


 
han_malign ©   (2004-10-25 14:26) [27]

> учесть предсказание переходов
- в свое время для коротких задержек использовалась конструкция asm jmp 2 end;, как раз для сброса конвеера, поскольку nop процессором игнорируется - возможно здесь таже ситуация. (при работе с некоторым железом (LCard например), без "магических" задержек не обойтись)


 
TUser ©   (2004-10-25 15:23) [28]


> http://www.rsdn.ru/forum/Message.aspx?mid=858629&only=1

LOL. Это круто заархивированное сообщение - вот что он выдает. 2295 знаков ужато в программу размером 838 байт исходного кода.

On the first day of Christmas my true love gave to me
a partridge in a pear tree.

On the second day of Christmas my true love gave to me
two turtle doves
and a partridge in a pear tree.

On the third day of Christmas my true love gave to me
three french hens, two turtle doves
and a partridge in a pear tree.

On the fourth day of Christmas my true love gave to me
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the fifth day of Christmas my true love gave to me
five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the sixth day of Christmas my true love gave to me
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the seventh day of Christmas my true love gave to me
seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the eighth day of Christmas my true love gave to me
eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the ninth day of Christmas my true love gave to me
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the tenth day of Christmas my true love gave to me
ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the eleventh day of Christmas my true love gave to me
eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the twelfth day of Christmas my true love gave to me
twelve drummers drumming, eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.




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

Форум: "Потрепаться";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.043 c
14-1098565309
Exeption
2004-10-24 01:01
2004.11.14
Правда ли что Word писался не Microsoftom?


8-1091640838
miek
2004-08-04 21:33
2004.11.14
GLScene: вопросы


1-1099152138
Tria
2004-10-30 20:02
2004.11.14
Как в TBitBtn отловить момент после создания формы?


14-1098964364
SeVTov
2004-10-28 15:52
2004.11.14
Delphi глючит


6-1094485928
Gera
2004-09-06 19:52
2004.11.14
Indy tcpClient и tcpServer





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский