-
Сделал небольшой нуботест по скорости работы со строками
и выяснилось что скомпиленый в х64 работает в 2.5 раза медленней чем х32
это нормально???
тестил на ХЕ3 и "берлине" с {$DEFINE PUREPASCAL} и без
program Project1;
uses
windows;
var
a:ansistring;
r:rawbytestring;
u:unicodestring;
w:widestring;
s:shortstring;
i,j,x,t:cardinal;
begin
s:='This is a test';
t:=GetTickCount;
for i:=0 to 100000 do begin
s:=' ';
for j := 0 to 250 do begin
s:=s+' ';
end;
end;
x:= GetTickCount-t;
writeln('shortstring=',x);
a:='This is a test';
t:=GetTickCount;
for i:=0 to 100000 do begin
a:=' ';
for j := 0 to 250 do begin
a:=a+' ';
end;
end;
x:= GetTickCount-t;
writeln('ansistring=',x);
r:='This is a test';
t:=GetTickCount;
for i:=0 to 100000 do begin
r:=' ';
for j := 0 to 250 do begin
r:=r+' ';
end;
end;
x:= GetTickCount-t;
writeln('rawbytestring=',x);
u:='This is a test';
t:=GetTickCount;
for i:=0 to 100000 do begin
u:=' ';
for j := 0 to 250 do begin
u:=u+' ';
end;
end;
x:= GetTickCount-t;
writeln('unicodestring=',x);
w:='This is a test';
t:=GetTickCount;
for i:=0 to 100000 do begin
w:=' ';
for j := 0 to 250 do begin
w:=w+' ';
end;
end;
x:= GetTickCount-t;
writeln('widestring=',x);
Readln;
end.
-
Замени, для начала, Cardinal на NativeUInt
-
> DayGaykin © (11.09.17 13:26) [1]
ничего не изменилось, что было очевидно
-
> QAZ © (11.09.17 13:20)
у Делфи это нормально.
там где так уж нужна и важна оптимизация надо использовать другой инструмент.
-
> Eraser © (11.09.17 14:23) [3]
возникла гениальная(да я такой) мысль
а ведь изменение {$DEFINE PUREPASCAL} не касается уже скомпиленых модулей?
а System не перекомпиливается же и по умолчанию там вся х32 на асамблерных вставках скомпилена, потому и быстрей?
не?
-
не касается уже скомпиленых модулей?
касается, если билд. и если "там" твои дефайны видны.
но они же не видны;
-
... и если конечно вообще пас пристутствует.
-
> там где так уж нужна и важна оптимизация надо использовать
> другой инструмент.
в лазарусе между битностью разница небольшая, но тормозней чем дельфи х64
-
> QAZ © (11.09.17 14:37) [4]
беда в том, что код x32 тоже тормозной для задач, где действительно нужна скорость/оптимизация и, тем более, различные SSEx современных процессоров за последние 20 лет.
-
> Eraser © (11.09.17 17:44) [8]
sse3 уже в 2007м делфи был
в нее же был включен код с проекта fastcode
-
> rrrrrrr © (11.09.17 15:09) [6]
пас system присутствует, но в этих версиях никогда не компилится, даже если удалить dcu, даже не пытается, юзается только для отладки
-
Если взять C++, то там 64-битное приложение выполяется на 15-20% быстрее, нежели точно такое же, но 32-битное.
-
так я и не про сустем конкретно.
если пасы в library path
то будет компиляция
-
плюс эти пасы могут быть в пакете и даже если нету дцу и нету пасов (или они есть) то может линковаться весь пакет через дцу самого пакета
-
> rrrrrr © (11.09.17 19:48) [12]
все ядро работы со строками в систем, 90% кода всех программ - работа со строками
систем не перекомпилируется
так понятней?
-
> Dimka Maslov © (11.09.17 19:18) [11]
скинь похожий нубокод для ВС ?
-
> 90% кода всех программ - работа со строками
Очень сильное и, к тому же, неверное заявление. Программы бывают разные.
-
Вещи говорите правильные, но глупости выводите несуразные, вроде взрослые люди, на асм выхлоп могут глянуть компилера и выводы сделать, ан нет
-
> Rouse_ © (12.09.17 22:58) [17]
я чо, я ничо, был бы умным не спрошал бы
-
>>все ядро работы со строками в систем, 90% кода всех программ - работа со строками
Неправильно построенная система. Даже pcre работает только с указателями.