![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 16.01.2008
Сообщений: 288
|
![]()
В люобой книге написано, что самый быстрый способ поменять значения a и b это с помощью Хоr. Tо есть так:
a:=a xor b; b:=a xor b; a:=a xor b; Но на моем ТP, этот код почему-то работает медленее, чем с введением дополнительной переменной?! |
![]() |
![]() |
![]() |
#2 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
![]()
Наверное так:
Если менять ч/з дополнительную переменную temp, то компилятор сделает это скорее всего так - mov eax, [a] -1 такт mov [temp], eax -1 такт mov eax, [b] -1 такт mov [a], eax -1 такт mov eax, [temp] -1 такт mov [b], eax -1 такт - всего 6 тактов А если ч/з XOR то можно предположить что так - mov eax, [a] -1 такт xor eax, [b] -2 такта mov [a], eax -1 такт mov eax, [a] -1 такт xor eax, [b] -2 такта mov [b], eax -1 такт mov eax, [a] -1 такт xor eax, [b] -2 такта mov [a], eax -1 такт - всего 12 тактов (т.е. в два раза медленнее) Насчёт - xor eax, [b] -2 такта - это на .486 А вообще чтобы точно ответить на этот вопрос можно дизассемблить и посмотреть чего же там на самом деле понаделал ваш компилятор.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 16.01.2008
Сообщений: 288
|
![]()
Ulex, получается, что хor работает быстрее только на ассемблере?
|
![]() |
![]() |
![]() |
#4 | |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
![]()
В Delphi есть более-менее нормальная (хотя и не всегда) оптимизация. А TP - это 16-битный код в 32-битной системе на 32-битном процессоре, неизвестно, что и ждать. Что-то тут все так просто считают такты... процессор - устройство сложное.
Цитата:
Что по основному вопросу - не видел книг, где написано, что xor - самый быстрый способ. P.S. На C вообще красиво a^=b^=a^=b. |
|
![]() |
![]() |
![]() |
#5 | |
Форумчанин
Регистрация: 16.01.2008
Сообщений: 288
|
![]()
Проверил на 32-разрядном FPC. C Xor работает примерно два раза медленее.
Цитата:
|
|
![]() |
![]() |
![]() |
#6 | |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
![]() Цитата:
Так а всё-таки дизассемблить, хотя бы ради любопытства ![]()
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Почему не работает цикл????? | Marsik | Помощь студентам | 2 | 22.06.2008 14:16 |
Почему моя программа РАБОТАЕТ!!! | aesoem | Общие вопросы Delphi | 3 | 09.05.2008 23:50 |
Почему не работает код? | Kashp | Общие вопросы Delphi | 3 | 09.08.2007 17:33 |