Помощь - Поиск - Пользователи - Календарь
Полная версия: Inc Vs +1
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
-DB-
Код

program l;
c,i:byte;
begin
c:=0;
for i:=1 to 255 do
inc(c);
readln;
end.

и
Код

program l;
c,i:byte;
begin
c:=0;
for i:=1 to 255 do
c:=c+1;
readln;
end.

Разницы же никакой так зачем же создали процедуру inc :fire:
volvo
Практически никакой. Только выполняется Inc быстрее...

Код

var s1, s2: string;
begin
 readln(s1);
 s2 := s1;
end;


Код

var s1, s2: string; i: byte;
begin
 s2 := '';
 readln(s1);
 for i := 1 to length(s1) do s2 := s2 + s1[i];
end;

Разницы тоже никакой. Какой способ выберешь?
-DB-
Конечно же первый;

=============
Значит лучше использовать inc и dec чем +1 и -1
xds
Inc не является процедурой в полном смысле этого слова. Это языковая конструкция (как и Dec, Write/Writeln, Read/Readln, Succ, Pred и т. п. - большинство "процедур" фиктивного модуля "System").

Причины большей эффективности Inc и Dec перед обычным присвоением заключаются в следующем: для конструкции "c := c + 1;" будет сгенерирован код
Код
mov al,c
xor ah,ah
inc ax
mov c,al

в то время как для "Inc(с);" - всего лишь одна инструкция:
Код
inc  byte ptr c


Разница очевидна: c Inc мы не замачиваем - мы просто стираем lol.gif
Флогримм
Значит лучше использовать inc и dec чем +1 и -1
Цитата
Значит лучше использовать inc и dec чем +1 и -1

причем не только для +1, -1!!

Цитата
Inc  (процедура)
-----------------
Увеличивает значение переменной.

Объявление:
Procedure Inc(Var X [ ; N : Longint ] );

Режим:
Windows, Real, Protected

Замечания:
Параметр X - переменная перечислимого типа или
переменная типа PChar, если допускается
расширенный синтаксис, а N - выражение
целочисленного типа. Значение X увеличивается
на 1, если параметр N не определен, или на N,
если праметр N определен, то есть Inc(X)
соответствует X:=X+1, а Inc(X, N)
соответствует X:=X+N.

С помощью Inc генерируется более
оптимизированный код, особенно полезный в
плотном цикле.

Обрати внимание на ->
Цитата
Значение X увеличивается
на 1, если параметр N не определен, или на N,
если праметр N определен, то есть Inc(X)
соответствует X:=X+1, а Inc(X, N)
соответствует X:=X+N.

... анлагочно с dec'ом
Но не забывай, что N может не может быть вефественным, только целым!
GoodWind
Цитата
Но не забывай, что N может не может быть вефественным, только целым!

и не обязательно положительным ;)
xds
Для "Dec(c, n);" и "Inc(c, n);" причины прироста производительности имеют аналогичный характер.

Достаточно забавно наблюдать за поведением оптимизатора BP (как, впрочем, и за работой любого другого "чёрного ящика"): он "догадывается" заменить "ax + 1" на "inc ax", "ax + 2" на "inc ax; inc ax", "ax + 7" на "add ax,7" и т. п, но, встретившись с операндом длиной 8 бит, вместо "inc al" честно делает "xor ah,ah" и сводит задачу к уже решённой. lol.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.