Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

С процедурами - лучше? [D7, XP]


AlexanderMS ©   (2006-05-16 19:06:00) 

Даёт ли какое-нибудь преимущество использование
s := concat(s, c)вместо s := s + с;
inc(c, 2)вместо c := с + 2?

В каких случаях код будет оптимальнее?


Gydvin   (2006-05-17 12:33:00) [1]


> Плохиш ©   (17.05.06 12:20) [11]


а что сделать, молодой не опытный.  ))


Gydvin   (2006-05-17 12:30:00) [2]

отключил

1 ~ 2035
2 ~ 2062

диагноз: они ~ одинаковы


Плохиш   (2006-05-17 12:20:00) [3]


> Gydvin ©   (17.05.06 11:54) [9]
> каждый раз, разные результаты

Я плякал, а посмотреть в окно CPU не догадались? Д7 транслирует оба примера в одинаковый код, что с оптимизацией, что без оной ;-)


Ega23   (2006-05-17 11:58:00) [4]


> Gydvin ©   (17.05.06 11:54) [9]


Оптимизация выключена?


Gydvin   (2006-05-17 11:54:00) [5]

каждый раз, разные результаты
по первому дает
от 671 до 735 чаще всего 688
по второму
от 671 до 781 чаще всего 703-719


Ega23   (2006-05-17 11:40:00) [6]


var
i, ticks, j : Integer;
begin
 j:=0;
 ticks:=GetTickCount;
 for i:=1 to 1000000000 do j:=Inc(j);;
 ticks:=GetTickCount-ticks;
 Label1.Caption:='Ticks - '+IntToStr(ticks)+'; j='+IntToStr(j);

var
i, ticks, j : Integer;
begin
 j:=0;
 ticks:=GetTickCount;
 for i:=1 to 1000000000 do j:=j+1;;
 ticks:=GetTickCount-ticks;
 Label1.Caption:='Ticks - '+IntToStr(ticks)+'; j='+IntToStr(j);


Первый вариант - 2609 мс, второй - 2594. Итого: + быстрее.


Gydvin   (2006-05-17 11:39:00) [7]


> Amoeba ©   (17.05.06 11:29) [5]

а что это :))))


Ega23   (2006-05-17 11:34:00) [8]


> кто-то здесь говорил, что inc лучше и обосновывал как-то


Конечно лучше. Если это asm.


Amoeba   (2006-05-17 11:29:00) [9]


> Gydvin ©   (16.05.06 20:43) [3]
> кто-то здесь говорил, что inc лучше и обосновывал как-то

Об этом говорится даже в документации по Паскалю


Loginov Dmitry   (2006-05-16 20:45:00) [10]

AlexanderMS ©   (16.05.06 19:06)
Даёт ли какое-нибудь преимущество использование
s := concat(s, c) вместо s := s + с;


Delphi syntax:

function Concat(s1 [, s2,..., sn]: string): string;

Description

In Delphi code, use Concat to concatenate an arbitrary number of strings. Each parameter is a string-type expression. The result is the concatenation of all the string parameters.

Using the plus (+) operator has the same effect on two strings as using the Concat function:

S := 'ABC' + 'DEF';

Tip: The plus operator is faster than Concat.


Gydvin   (2006-05-16 20:43:00) [11]

кто-то здесь говорил, что inc лучше и обосновывал как-то


_duk   (2006-05-16 20:38:00) [12]

inc(c, 2) использовать лучшее. на всех олимпиадах шарящие люди используют именно этот метод


TUser   (2006-05-16 20:21:00) [13]

См. CPU window

Зы. Реального преимущества не дает.


Наверх

Титульная страница Поиск, карта сайта Написать письмо