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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.049 c
14-1098528423
31512
2004-10-23 14:47
2004.11.14
Как вызвать метод класса в другом потоке?


3-1098085500
Ega23
2004-10-18 11:45
2004.11.14
В чём может быть дело???


14-1098870383
Tor
2004-10-27 13:46
2004.11.14
Установка Apollo SQL 6.0


14-1098863072
alles
2004-10-27 11:44
2004.11.14
Ну и вопросы по HTML!


14-1098668960
Думкин
2004-10-25 05:49
2004.11.14
С днем рождения! 25 октября