Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / почему ++x быстрее чем x++ / 13 сообщений из 13, страница 1 из 1
08.11.2007, 11:22:47
    #34924278
Paradoxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему ++x быстрее чем x++
Вот смотрю в Disassembly, вроде код тот же самый?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
		x++;
 00422953   mov         eax,dword ptr [x] 
 00422956   add         eax, 1  
 00422959   mov         dword ptr [x],eax 

		++x;
0042295C  mov         eax,dword ptr [x] 
0042295F  add         eax, 1  
 00422962   mov         dword ptr [x],eax 

Может быть это компилятор оптимизировал, но вообще почему ++x, быстрее чем x++.
И еще кому нужен INC в ассемблере ??
...
Рейтинг: 0 / 0
08.11.2007, 11:27:55
    #34924296
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему ++x быстрее чем x++
Во первых у тебя переменная не используется (хотя в этом случае будет просто перестановка операций), во вторых он быстрее для сложных типов. Искать этот баян в архивах форума.
...
Рейтинг: 0 / 0
08.11.2007, 11:43:55
    #34924377
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему ++x быстрее чем x++
налицо дефект логики
если удалось соптимизировать (читай привести x++ -> ++x) для данного конкретного случая, это вовсе не значит, что такая "оптимизация" (подчистка соплей за программистом) возможна всегда
...
Рейтинг: 0 / 0
08.11.2007, 11:49:34
    #34924417
Paradoxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему ++x быстрее чем x++
Gluk (Kazan)налицо дефект логики
если удалось соптимизировать (читай привести x++ -> ++x) для данного конкретного случая, это вовсе не значит, что такая "оптимизация" (подчистка соплей за программистом) возможна всегда
Да, но тогда как выглядет не оптимизированый код.
И еще вопрос был зачем вообще INC.
...
Рейтинг: 0 / 0
08.11.2007, 12:09:41
    #34924521
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему ++x быстрее чем x++
ParadoxxИ еще вопрос был зачем вообще INC.

Возможно inc только места меньше занимает, а скорость такаяже, тогда попробовать соптимизировать по скорости. Возможно хавать инструкции одного размера удобнее. Возможно, тестируемый компилятор просто не обращает внимания на подобные мелочи. :)
...
Рейтинг: 0 / 0
08.11.2007, 12:15:15
    #34924550
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему ++x быстрее чем x++
ParadoxxДа, но тогда как выглядет не оптимизированый код.


итератор от дека скажем инкрементни да посмотри
...
Рейтинг: 0 / 0
08.11.2007, 12:17:15
    #34924564
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему ++x быстрее чем x++
или таки используй значение которое тебе x++ вернет
дабы о компилятора побуждений что то оптимизировать не было
...
Рейтинг: 0 / 0
08.11.2007, 12:23:35
    #34924592
Leshij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему ++x быстрее чем x++
On Thu, 08 Nov 2007 11:49:34 +0300, Paradoxx <nospam@sql.ru>; wrote:

> Да, но тогда как выглядет не оптимизированый код.
> И еще вопрос был зачем вообще INC.
При отключенной оптимизации компиляторы обычно дословно переводят
программу на ассемблер. Если есть локальная переменная -- компилятор
честно положит ее на стек; правда не понятно, почему нельзя было
использовать INC EAX, но компилятору наверное виднее. В релиз версии
переменая скорее всего будет в регистре и увеличиваться будет через INC.
INC, кстати говоря и короче и быстрее, чем ADD, хотя бы потому, что не
надо загонять в регистр immediate operand.
--
Здесь у нас туманы и дожди, здесь у нас холодные рассветы,
Здесь на неизведанном пути ждут замысловатые сюжеты!
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
08.11.2007, 14:07:21
    #34925095
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему ++x быстрее чем x++
Paradoxx пишет:
> Может быть это компилятор оптимизировал, но вообще почему ++x, быстрее
> чем x++.

Оптимизировал. Вообще ++x быстрее особенно для сложных типов типа
итераторов, потому что не надо копировать возвращаемое значение.

++x ==

{
увеличить переменную x;
взять значение переменной х;
}

x++ ==
{
увеличить переменную x;
взять СТАРОЕ значение переменной х;
}

"взять СТАРОЕ значение переменной х" может потребовать
от сложного типа копирования самого себя в реализации для
последующего возвращения старого значения себя. Это может
быть накладно. Поэтому если x++ не нужен фактически, лучше
использовать ++x.

> И еще кому нужен INC в ассемблере ??

Эта комманда уже в своем коде неявно содержит константу 1, которая прибавляется
к значению. Поэтому она является одноместной и занимает меньше места в памяти.
Но вы правы, в некоторых ассемблерах ее нет. Но с другой стороны, если есть
место в адресном пространстве кодов комманд, почему бы и не сделать ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
08.11.2007, 14:08:21
    #34925101
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему ++x быстрее чем x++
Akh пишет:

> Возможно inc только места меньше занимает, а скорость такаяже, тогда
> попробовать соптимизировать по скорости. Возможно хавать инструкции
> одного размера удобнее.

Скорость одноместной операции также быстрее - не нужно загружать
второй операнд.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
08.11.2007, 21:16:30
    #34926477
teras
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему ++x быстрее чем x++
Paradoxx wrote:
> И еще кому нужен INC в ассемблере ??

vc генерит INC eax, если оптимизировать по размеру и add eax,1 при
оптимизации по скорости. Но качать документацию чтобы узнать почему - не
хочется.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
08.11.2007, 21:34:08
    #34926490
Paradoxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
почему ++x быстрее чем x++
Вот что нашел в (IA-32 Intel® Architecture Optimization Reference Manual point 2-68)

Assembly/Compiler Coding Rule 42. (M impact, H generality) inc and
dec instructions should be replaced with an add or sub instruction, because
add and sub overwrite all flags, whereas inc and dec do not, therefore
creating false dependencies on earlier instructions that set the flags.

Выходит Intel не советует INC или DEC.
...
Рейтинг: 0 / 0
12.11.2007, 12:43:21
    #34931870
почему ++x быстрее чем x++
http://www.wasm.ru/forum/viewtopic.php?id=21875
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / почему ++x быстрее чем x++ / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]