🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.pascal
Article #93040

Re: DynamicArray kontra StaticArray

#93040
From: webmajsterek
Date: Sun, 04 Jul 2010 07:02
91 lines
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.pl
References: <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