Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2015, 16:57   #1
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию i:=i+1 или Inc(i)

Здравствуйте.

Может немного глупый вопрос, но что быстрее работает i:=i+1 или Inc(i)?

Я так понимаю, что корректнее писать Inc(i), но что быстрее?

Заранее благодарен.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 06.08.2015, 17:06   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Написал данный код в RAD XE6 и посмотрел дизассемблер:
Цитата:
Project1.dpr.138: n := n + 1;
0041C68A FF05BC3E4200 inc dword ptr [$00423ebc]

Project1.dpr.139: inc(n);
0041C690 FF05BC3E4200 inc dword ptr [$00423ebc]
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 06.08.2015, 17:15   #3
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

i+1 может не оптимизироваться. Inc и быстрее и понятнее компилятору.
ResourceSpace вне форума Ответить с цитированием
Старый 06.08.2015, 17:57   #4
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Спасибо, как-то не подумал проверить это в дизассемблере, в Delphi 7 он тоже есть.

Отключил оптимизацию и проверил различные варианты, результат один и тот же:
Цитата:
Inc(i,2000);
0044FBBF 8145F8D0070000 add [ebp-$08], $000007d0
i:=i+2000;
0044FBC6 8145F8D0070000 add [ebp-$08], $000007d0
Просто изначально думал, что из-за Inc(i) будет вызов функции.

Может вопрос не в тему, но есть ли что-то подобно для строк? Чтоб не писать str:=str+'word';
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 06.08.2015, 18:45   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Есть функция concat. Скорость не проверял, но Вы теперь и сами знаете как.
Перед использованием внимательно прочтите о функции.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 06.08.2015 в 18:50.
Utkin вне форума Ответить с цитированием
Старый 06.08.2015, 18:53   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Компилятор такие штуки должен уметь оптимизировать. Но в древнем Турбо Паскале inc(i) был быстрее, к тому же при inc отсутствовала проверка выхода за границы типа (переполнение).
Arigato вне форума Ответить с цитированием
Старый 06.08.2015, 18:56   #7
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Utkin, Concat, это не совсем то, что нужно. Вид записи будет:
Код:
str:=Concat(str,'67890');
А нужно что-то вроде этого:
Код:
UnknownFunc(str,'67890');
Если такая функция есть.

Как вариант:
Insert('67890',str,Length(str));
Но это не вариант
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).

Последний раз редактировалось Krasiosoft; 06.08.2015 в 19:02.
Krasiosoft вне форума Ответить с цитированием
Старый 06.08.2015, 19:10   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Если такая функция есть.
Сделайте обертку, проблем-то.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 06.08.2015, 19:16   #9
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Должен уметь. Но некоторые не догадываются. Лучше всегда писать inc, да и по смыслу больше подходит.
В догонку: Задачка №5
ResourceSpace вне форума Ответить с цитированием
Старый 06.08.2015, 19:38   #10
Чудо-программист
Форумчанин
 
Регистрация: 22.07.2015
Сообщений: 138
По умолчанию

Цитата:
Но в древнем Турбо Паскале inc(i) был быстрее
Он что, умел развертывать процедуру?
)))
Чудо-программист вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен или код, или блок схема, или просто обьяснение. shewlett Помощь студентам 1 03.06.2015 16:34
Нужен скрипт для Photoshop или Lightroom, ну или отдельную программу. Михаил Понедельник Фриланс 2 09.11.2011 21:37
Тестирующая программа (на PHP или JavaScript или Delphi или Visual Basic) @@@Сергей@@@ Фриланс 2 05.05.2011 17:48
Ошибка в temp... виноваты динамичсекие массивы или тип не тот или.. Shabalinuk C++ Builder 5 12.11.2010 12:38