![]() |
|
#1
|
|||
|
|||
![]() Почему в исходниках Delphi при передаче строки string в процедуру часто используется модификатор const?
![]() Если строка короткая, то понятно. Длинная строка - указатель на саму строку. Если строка не изменяется, то передавать по ссылке "указатель на саму строку", который занимает всего четыре байта, не вижу смысла. Последний раз редактировалось pirsddd, 08.04.2011 в 13:15. |
#2
|
|||
|
|||
![]() Цитата:
|
#3
|
|||
|
|||
![]() Почему это только string?
любой параметр может быть передан как const, при этом изменить ее внутри процедуры или функции нельзя. и для компилятора так лучше (по крайней мере в хелпе так описано) Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |
#4
|
|||
|
|||
![]() В чём разница? Какой код быстрее?
Код:
function SSS1(S: string): Char; begin Result := S[1]; end; function SSS2(const S: string): Char; begin Result := S[1]; end; |
#5
|
|||
|
|||
![]() Разница в том что без константы ты параметр можешь менять, а при константе не можешь (внутри процедуры)... И это кстати уже написано выше)
|
#6
|
|||
|
|||
![]() Разница в скорости кода:
Код:
var s: string; procedure TForm1.Button1Click(Sender: TObject); var t, i: Integer; begin s := 'fgh'; t := GetTickCount(); for i := 0 to 10000000-1 do SSS1(s); ShowMessage(IntToStr(GetTickCount() - t)); // 1406 миллисекунд t := GetTickCount(); for i := 0 to 10000000-1 do SSS2(s); ShowMessage(IntToStr(GetTickCount() - t)); // 47 миллисекунд end; |
#7
|
||||
|
||||
![]() pirsddd, глянь во View CPU функцию с const и без и увидишь разницу
Пишу программы за еду. __________________ |
#8
|
|||
|
|||
![]() Как видите, разница в скорости большая - в 30 раз.
Почему? |
#9
|
|||
|
|||
![]() Так подозреваю что в первом случае создастся копия переменной во второй компилятор посчитает что проще передать ссылку на переменную.
ПС, Сугубо мое личное понимание. Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |
#10
|
|||
|
|||
![]() Я в ассемблере не силён. На сколько я понял из View CPU, скорость кода без const меньше из-за вызова функций LStrAddRef и LStrClr для увеличения и уменьшения кратности ссылок на строку. Но почему такая большая разница - в 30 раз?
|
#11
|
|||
|
|||
![]() NumLock, Спасибо за совет!
![]() |