|
|
|
почему ++x быстрее чем x++
|
|||
|---|---|---|---|
|
#18+
Вот смотрю в Disassembly, вроде код тот же самый? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Может быть это компилятор оптимизировал, но вообще почему ++x, быстрее чем x++. И еще кому нужен INC в ассемблере ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 11:22:47 |
|
||
|
почему ++x быстрее чем x++
|
|||
|---|---|---|---|
|
#18+
Во первых у тебя переменная не используется (хотя в этом случае будет просто перестановка операций), во вторых он быстрее для сложных типов. Искать этот баян в архивах форума. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 11:27:55 |
|
||
|
почему ++x быстрее чем x++
|
|||
|---|---|---|---|
|
#18+
налицо дефект логики если удалось соптимизировать (читай привести x++ -> ++x) для данного конкретного случая, это вовсе не значит, что такая "оптимизация" (подчистка соплей за программистом) возможна всегда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 11:43:55 |
|
||
|
почему ++x быстрее чем x++
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)налицо дефект логики если удалось соптимизировать (читай привести x++ -> ++x) для данного конкретного случая, это вовсе не значит, что такая "оптимизация" (подчистка соплей за программистом) возможна всегда Да, но тогда как выглядет не оптимизированый код. И еще вопрос был зачем вообще INC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 11:49:34 |
|
||
|
почему ++x быстрее чем x++
|
|||
|---|---|---|---|
|
#18+
ParadoxxИ еще вопрос был зачем вообще INC. Возможно inc только места меньше занимает, а скорость такаяже, тогда попробовать соптимизировать по скорости. Возможно хавать инструкции одного размера удобнее. Возможно, тестируемый компилятор просто не обращает внимания на подобные мелочи. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 12:09:41 |
|
||
|
почему ++x быстрее чем x++
|
|||
|---|---|---|---|
|
#18+
ParadoxxДа, но тогда как выглядет не оптимизированый код. итератор от дека скажем инкрементни да посмотри ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 12:15:15 |
|
||
|
почему ++x быстрее чем x++
|
|||
|---|---|---|---|
|
#18+
или таки используй значение которое тебе x++ вернет дабы о компилятора побуждений что то оптимизировать не было ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 12:17:15 |
|
||
|
почему ++x быстрее чем x++
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 12:23:35 |
|
||
|
почему ++x быстрее чем x++
|
|||
|---|---|---|---|
|
#18+
Paradoxx пишет: > Может быть это компилятор оптимизировал, но вообще почему ++x, быстрее > чем x++. Оптимизировал. Вообще ++x быстрее особенно для сложных типов типа итераторов, потому что не надо копировать возвращаемое значение. ++x == { увеличить переменную x; взять значение переменной х; } x++ == { увеличить переменную x; взять СТАРОЕ значение переменной х; } "взять СТАРОЕ значение переменной х" может потребовать от сложного типа копирования самого себя в реализации для последующего возвращения старого значения себя. Это может быть накладно. Поэтому если x++ не нужен фактически, лучше использовать ++x. > И еще кому нужен INC в ассемблере ?? Эта комманда уже в своем коде неявно содержит константу 1, которая прибавляется к значению. Поэтому она является одноместной и занимает меньше места в памяти. Но вы правы, в некоторых ассемблерах ее нет. Но с другой стороны, если есть место в адресном пространстве кодов комманд, почему бы и не сделать ? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 14:07:21 |
|
||
|
почему ++x быстрее чем x++
|
|||
|---|---|---|---|
|
#18+
Akh пишет: > Возможно inc только места меньше занимает, а скорость такаяже, тогда > попробовать соптимизировать по скорости. Возможно хавать инструкции > одного размера удобнее. Скорость одноместной операции также быстрее - не нужно загружать второй операнд. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 14:08:21 |
|
||
|
почему ++x быстрее чем x++
|
|||
|---|---|---|---|
|
#18+
Paradoxx wrote: > И еще кому нужен INC в ассемблере ?? vc генерит INC eax, если оптимизировать по размеру и add eax,1 при оптимизации по скорости. Но качать документацию чтобы узнать почему - не хочется. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 21:16:30 |
|
||
|
почему ++x быстрее чем x++
|
|||
|---|---|---|---|
|
#18+
Вот что нашел в (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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2007, 21:34:08 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34924377&tid=2027829]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
254ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 562ms |

| 0 / 0 |
