Article View: pl.comp.lang.pascal
Article #93040Re: DynamicArray kontra StaticArray
From: webmajsterek
Date: Sun, 04 Jul 2010 07:02
Date: Sun, 04 Jul 2010 07:02
91 lines
3477 bytes
3477 bytes
> No i mamy, bardziej miarodajny test, z zapisem i odczytem, i nie tylko
> [zera]
{... ciach ...}
>
> i dostaję
>
> Tablica OpenArray 00.00.46
> Tablica DefArray 00.00.39
>
Rzeczywiscie mój test jest źle zaprojektowany . Teraz go porawiłem - żeby
wygladał tak jak mniej więcej w programie pracuje .
{$mode objfpc}
uses sysutils;
type
TDefNulArray = array[0..0] of longint;
TDefArray = array[0..1000] of longint;
TOpenArray = array of longint;
var
DefArray: array[0..1000] of longint;
DefArray2: array[0..1000] of longint;
OpenArray,OpenArray2: array of longint;
PDefArray,PDefArray2: ^TDefArray;
PNul: ^TDefNulArray;
POpenArray: ^TOpenArray;
L1, L2, Loop: Longint;
StartTime, EndTime: TDateTime;
begin
L2 := 10000000;
DefArray[0] := 0;
StartTime := Now;
for Loop := 1 to 1000 do
DefArray[Loop] := 0;
for Loop := 1 to 1000 do
DefArray2[Loop] := 1;
for L1 := 1 to L2 do
for Loop := 1 to 1000 do
DefArray[Loop] := DefArray[Loop] + DefArray2[Loop];
EndTime := Now;
WriteLn(' Plus DefArray ' + TimeToStr(EndTime - StartTime));
SetLength(OpenArray,1001);
SetLength(OpenArray2,1001);
StartTime := Now;
for Loop := 1 to 1000 do OpenArray[Loop] := 0;
for Loop := 1 to 1000 do OpenArray2[Loop] := 1;
for L1 := 1 to L2 do
for Loop := 1 to 1000 do OpenArray[Loop] := OpenArray[Loop]+ OpenArray2[Loop];
EndTime := Now;
Writeln(' Plus OpenArray ' + TimeToStr(EndTime - StartTime));
GetMem(PDefArray, SizeOf(TDefArray));
GetMem(PDefArray2, SizeOf(TDefArray));
for Loop := 1 to 1000 do PdefArray^[Loop] := 0;
for Loop := 1 to 1000 do PdefArray2^[Loop] := 1;
startTime := Now;
for L1 := 1 to L2 do
for Loop := 1 to 1000 do
begin
PDefArray^[Loop] := PDefArray^[Loop] + PDefArray2^[Loop];
end;
EndTime := Now;
WriteLn(' Plus Pointer DefArray ' +TimeToStr(EndTime - StartTime));
End.
dla FPC mam ( optymalizacja 3 stpnai , właczone mnie wazne optymalizacje )
Plus DefArray 00:00:42
Plus OpenArray 00:00:58
Plus Pointer DefArray 00:00:52
Dla Delphi7
Plus DefArray 00:00:17
Plus OpenArray 00:00:22
Plus Pointer DefArray 00:00:16
i tu pytanie dlaczego konstrukcja typu dynamiczna tablica jest o 20 %
wolniejsza ??
i dla czego FPC generuje tak wolny kod ( 3 razy wolniejszy ) ??
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Technical Details
Message-ID:
<47f6.000000de.4c3031f0@newsgate.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!plix.pl!newsfeed1.plix.pl!news.nask.pl!news.nask.org.pl!news.onet.pl!newsgate.onet.pl!niusy.onet.plReferences:
<i0j212$c42$1@news.onet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!plix.pl!newsfeed1.plix.pl!news.nask.pl!news.nask.org.pl!news.onet.pl!newsgate.onet.pl!niusy.onet.pl From: webmajsterek@poczta.onet.pl Newsgroups: pl.comp.lang.pascal Subject: Re: DynamicArray kontra StaticArray Date: Sun, 04 Jul 2010 09:02:08 +0200 Organization: Onet.pl Lines: 91 Sender: news@newsgate.onet.pl Message-ID: <47f6.000000de.4c3031f0@newsgate.onet.pl> References: <i0j212$c42$1@news.onet.pl> NNTP-Posting-Host: newsgate.onet.pl Mime-Version: 1.0 X-Trace: newsgate.onet.pl 1278226929 31943 213.180.130.18 (4 Jul 2010 07:02:09 GMT) X-Complaints-To: niusy@onet.pl NNTP-Posting-Date: Sun, 4 Jul 2010 07:02:09 +0000 (UTC) X-Mailer: http://niusy.onet.pl X-Forwarded-For: 79.186.219.237, 10.174.28.62 X-User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; FDM) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit