[fpc-pascal] Optimize code for speed
Gerhard Scholz
gs at g--s.de
Fri Jun 10 12:46:37 CEST 2005
----- Original Message -----
From: "L505" <fpc505 at z505.com>
To: "FPC-Pascal users discussions" <fpc-pascal at lists.freepascal.org>
Sent: Friday, June 10, 2005 10:18 AM
Subject: [fpc-pascal] Optimize code for speed
...
> 1. begin
> M yString=Do.Something
> StrList3.add(MyString);
> end
>
> 2. begin
> StrList3.add
> end
>
I assume you mean:
1: begin
M yString=Do.Something
StrList3.add(MyString);
end
2: begin
StrList3.add (do.something);
end
The "waste" of one little variable is not so important since when you leave
that procedure the local variables vanish. Version 2 should be a little bit
faster.
> If you KNOW the string is going to be short, is shortstring and better,
or is
> ansistring better?
Generally shortstring should be faster. But if you have both shortstrings
and ansistrings in your program: every conversion (e.g. by assignment) from
one to the other costs a lot. So, when you are forced to have some
ansistrings, normally it's the best to use only ansistrings.
> If you KNOW the integer is going to be short, is it better to specify a
ShortInt?
Depends on the machine: in i386-code longints (int32) seem to be preferred:
better handled by the compiler, and faster executed (should be at least on
pentium). On older 386 integer and shortint was better. On other processors
I don't know.
But if you have to keep a lot of data (e.g. array [ 1..1000000 ] of
an_integer_type), then space considerations might be more important than
speed.
I myself like the range constructs, e.g. var j : 1..23, when I know the
variable cannot senseful be outside that range. So debugging is done by the
program itself (with $R+,O+)
> Is the default compiler setting regular strings, or ansistrings?
(If I understand the compiler source correctly) in delphi mode: ansistrings,
otherwise: normal strings
> Is a boolean faster than an integer who you just set as 0 and 1?
Should be the same: a boolean is an ENUM with the values ( FALSE, TRUE )
which map to the values 0 and 1
as far as I remember that was the original definition: type boolean =
false, true ) ;
To check what is better (e.g. your example above), you should produce a
little test program containing both of your versions and compile it with the
option "-al" to get the assembler source. Look at that source. That version
which produces less code normally should also be the faster one.
Gerhard
More information about the fpc-pascal
mailing list