|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.05.2008, 09:19 | #1 |
Форумчанин
Регистрация: 16.01.2008
Сообщений: 288
|
Почему ХОR работает медленно?
В люобой книге написано, что самый быстрый способ поменять значения a и b это с помощью Хоr. Tо есть так:
a:=a xor b; b:=a xor b; a:=a xor b; Но на моем ТP, этот код почему-то работает медленее, чем с введением дополнительной переменной?! |
01.05.2008, 10:06 | #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 |
01.05.2008, 13:06 | #3 |
Форумчанин
Регистрация: 16.01.2008
Сообщений: 288
|
Ulex, получается, что хor работает быстрее только на ассемблере?
|
01.05.2008, 13:14 | #4 | |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
В Delphi есть более-менее нормальная (хотя и не всегда) оптимизация. А TP - это 16-битный код в 32-битной системе на 32-битном процессоре, неизвестно, что и ждать. Что-то тут все так просто считают такты... процессор - устройство сложное.
Цитата:
Что по основному вопросу - не видел книг, где написано, что xor - самый быстрый способ. P.S. На C вообще красиво a^=b^=a^=b. |
|
01.05.2008, 13:33 | #5 | |
Форумчанин
Регистрация: 16.01.2008
Сообщений: 288
|
Проверил на 32-разрядном FPC. C Xor работает примерно два раза медленее.
Цитата:
|
|
01.05.2008, 14:51 | #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 |