IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Сравненин
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 75
Пол: Мужской

Репутация: -  0  +


Кто-нибудь может програмно показать отличия между inc(n) и n:=n+1 для целого n. Плз помогите!


--------------------
Ну, а почему бы в свободное время не позаниматься программированием?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






yes2.gif Как я и написал выше - 32 битные компиляторы оптимизируют код... Вот фрагменты ASM-кода для вышеприведенной программы (FPC 2.0.4, в режиме совместимости с Дельфи):

# [13] for i := -2147483647 to 2147483646 do inc(k);
movl $-2147483647,U_P$PROJECT1_I
decl U_P$PROJECT1_I
.balign 4
.L13:
incl U_P$PROJECT1_I
incl U_P$PROJECT1_K
cmpl $2147483646,U_P$PROJECT1_I
jl .L13
.Ll5:
.stabn 68,0,14,.Ll5 - _main


# [20] for i := -2147483647 to 2147483646 do k:=k+1;
movl $-2147483647,U_P$PROJECT1_I
decl U_P$PROJECT1_I
.balign 4
.L61:
incl U_P$PROJECT1_I
incl U_P$PROJECT1_K
cmpl $2147483646,U_P$PROJECT1_I
jl .L61
.Ll10:
.stabn 68,0,21,.Ll10 - _main

Как видим, что Inc(k), что K := K + 1 заменяются на INCL

Другое дело - если K сделать байтовым... Тогда:
# [14] for i := -2147483647 to 2147483646 do inc(k);
movl $-2147483647,U_P$PROJECT1_I
decl U_P$PROJECT1_I
.balign 4
.L13:
incl U_P$PROJECT1_I
incb U_P$PROJECT1_K
cmpl $2147483646,U_P$PROJECT1_I
jl .L13
.Ll5:
.stabn 68,0,15,.Ll5 - _main


# [21] for i := -2147483647 to 2147483646 do k:=k+1;
movl $-2147483647,U_P$PROJECT1_I
decl U_P$PROJECT1_I
.balign 4
.L61:
incl U_P$PROJECT1_I
movzbl U_P$PROJECT1_K,%eax
incl %eax
movb %al,U_P$PROJECT1_K
cmpl $2147483646,U_P$PROJECT1_I
jl .L61
.Ll10:
.stabn 68,0,22,.Ll10 - _main
, и разница во времени выполнения кода уже в 2 раза больше.

 К началу страницы 
+ Ответить 

Сообщений в этой теме
}0pa   Сравненин   3.12.2006 5:39
klem4   Что значит программно показать отличие ? Эти опера…   3.12.2006 13:56
Malice   Если делаешь n=n+1 то используется сложение через …   3.12.2006 14:11
volvo   :no1: Для 16-битных компиляторов (проверялось на …   3.12.2006 14:39
}0pa   А с помощью Таймера по=моему можно проверить...? Д…   3.12.2006 23:21
volvo   Так как показано здесь: Улучшение кода (просто по…   3.12.2006 23:38
}0pa   Вот сделал: uses crt; const n = 25000; var tm, …   4.12.2006 4:42
Malice   У тебя k - longint, поэтому inc выглядит так: add…   4.12.2006 18:18
}0pa   Ну, уж очень хочется узнать :give_rose: :give_ros…   4.12.2006 17:59
}0pa   1.Malice, я просто с трудом понимаю, что значит тв…   5.12.2006 3:39
Malice   1.Malice, я просто с трудом понимаю, что значит т…   5.12.2006 13:32
hiv   Это все относится к вопросу чистоты эксперимента …   5.12.2006 15:48
volvo   :yes2: Как я и написал выше - 32 битные компилятор…   5.12.2006 16:05
NTL   Тогда,пожалуйста,объясните рез-ат моего тестера, к…   11.12.2006 22:40
Malice   Потому что у тебя m - longint, читай внимательнее,…   11.12.2006 23:55


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 8.05.2024 4:38
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name