Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Compiler kao resource hogger...

[es] :: Pascal / Delphi / Kylix :: Compiler kao resource hogger...

[ Pregleda: 2310 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Divjak
Vladimir Divjak
Student

Član broj: 4783
Poruke: 535
195.252.85.*



+1 Profil

icon Compiler kao resource hogger...17.04.2005. u 20:27 - pre 231 meseci
Ovo se odnosi na Pascal...
kada radim neki program koji recimo radi sa po dva tri niza od 10 000 elemenata... posle odredjenog vremena kompjuter zna tako da se uspori da jedan obican step over korak traje i po ceo minut...
zasto se ovo desava? zar compiler ne bi trebao da oslobodi memoriju koju je u toku rada koristio?

Kako ovo da izbegnem?
And don't be mad at me for crying for humanity,
call it pretensions but I got good intentions,
to keep my sanity, I'm hoping, fuck, there's gotta be
an answer to their strategies and their evil inventions... ~Looptroop
 
Odgovor na temu

Divjak
Vladimir Divjak
Student

Član broj: 4783
Poruke: 535
195.252.85.*



+1 Profil

icon Re: Compiler kao resource hogger...17.04.2005. u 21:16 - pre 231 meseci
Problem je bio u tome sto sam niz od 100 000 000 elemenata tipa boolean deklarisao kao globalnu promenljivu (16 MB) a stack mi nije bio toliki pa je doslo do usporavanja, mada ne vidim zasto bi ovo usporavalo ceo sistem?

Jel moze neko da mi objasni zasto boolean zauzima ceo byte a ne samo bit?

Takodje koju data strukturu koristiti kada mi treba ovako nesto znaci zelim da oznacim koje koordinate su prikljucene grafu a koje nisu pa sam to deklarisao kao
Code:

K  : array[1..10000,1..10000] of boolean;

ali ocigledno da to tako ne moze...
And don't be mad at me for crying for humanity,
call it pretensions but I got good intentions,
to keep my sanity, I'm hoping, fuck, there's gotta be
an answer to their strategies and their evil inventions... ~Looptroop
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.vdial.verat.net.



+1 Profil

icon Re: Compiler kao resource hogger...18.04.2005. u 01:17 - pre 231 meseci
Citat:

K : array[1..10000,1..10000] of boolean

Cudi me da ne prijavljuje overflow...

Anyway, Boolean zaista zauzima jedan bajt memorije, prosto zato sto je bajt osnovna memorijska jedinica, tj. procesor ne moze da adresira manje od jednog bajta @ a time (ali moze vise, 386+ adresiraju cele DWORD-ove). 8086 (TP) arhitektura adresira memoriju sistemom segment:offset (tzv. real-mode), gde su seg i off dvobajtni registri koji definisu memorijsku lokaciju (red. br. bajta) na kome se nalazi podatak za operaciju. Kod TP-a ogranicenje za stat. varijable je jedan mem. segment (znaci ostaje samo offset(dvobajtni) registar koji moze da adresira max. 2^16=64Kb, zato me cudi da ti nema overflow-a). Ne mogu se adresirati bitovi. Ali se mogu pakovati, ali to implementirati za konkretno potrebu koju si naveo je mnogo posla za malu korist.

Delphi (valjda) ima neki svoj sistem pakovanja bitova (valjda je TBitSet, nisam tamo zalazio), mada mozes i da napravis svoj (jedan objekat u TP-u koji ce imati metode za upis i ispis bitova, jednio umesto uglaste koristis obicnu zagradu ;-)
Bitove standardno upisujes sa or-om, testiras sa and-om, clearujes sa xor-om...
(npr. X or RBrBita^2, RbrBita < 8). Naravno, kada jednom napravis taj objekat, mozes ga koristiti u svim ostalim programima... ;-)

Sto se tice nekog grafa koji si pomenuo (koordinate "prikljucene" grafu, ne razumem bas sta to znaci), zar su ti potrebne koordinate *svake* tacke?
Ako nisu, napravi record sa poljima X i Y, napravi matricu tih recorda, i kada treba neku koordinatu da "prikljucis", samo dodaj u matricu.

Pozdrav,
v!rus
 
Odgovor na temu

Toyo

Član broj: 45193
Poruke: 227
*.kovnet.co.yu.



+1 Profil

icon Re: Compiler kao resource hogger...18.04.2005. u 03:00 - pre 231 meseci
Da prostite, ali mislim da Delphi, zabole k.... za smestanje 8 booleana u 1 bajt.

Sto se tice pakovanja bilo je nesto pre jedno 15 godina tipa: packed array bla bla (a mozda i gresim)

Pozdrav
 
Odgovor na temu

Divjak
Vladimir Divjak
Student

Član broj: 4783
Poruke: 535
*.zrenjanin.beotel.net.



+1 Profil

icon Re: Compiler kao resource hogger...18.04.2005. u 10:35 - pre 231 meseci
Citat:
Cudi me da ne prijavljuje overflow..


radi se o FreePascalu...

Citat:
Sto se tice nekog grafa koji si pomenuo (koordinate "prikljucene" grafu, ne razumem bas sta to znaci), zar su ti potrebne koordinate *svake* tacke?


dobro, ne znam tacno kako se to kaze, ja u skoli jos nisam stigao do grafova...
ja moram u svakom trenutku da znam koja tacka je vec u grafu a koja nije, pretrazivanje je malo sporo za ovo zar ne?
And don't be mad at me for crying for humanity,
call it pretensions but I got good intentions,
to keep my sanity, I'm hoping, fuck, there's gotta be
an answer to their strategies and their evil inventions... ~Looptroop
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.248.eunet.yu.



+1 Profil

icon Re: Compiler kao resource hogger...18.04.2005. u 10:43 - pre 231 meseci
Moguce je da velicina niza (100MB) + ostali programi i windows prelazi fizicku kolicinu memorije koju imas na racunaru, pa se stalno vrsi prebacivanje u swap fajl i nazad. Moras da pronadjes neko "pametnije" resenje za grafove.
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.248.eunet.yu.



+1 Profil

icon Re: Compiler kao resource hogger...18.04.2005. u 10:48 - pre 231 meseci
Mozes da napravis svoj mehanizam za ustedu memorije pakovanjem 8 tacaka u jedan bajt, sto bi trosilo 100/8 = 12,5MB RAM memorije
 
Odgovor na temu

Divjak
Vladimir Divjak
Student

Član broj: 4783
Poruke: 535
*.zrenjanin.beotel.net.



+1 Profil

icon Re: Compiler kao resource hogger...18.04.2005. u 15:07 - pre 231 meseci
@prva poruka...
ne radi se o tome imam 1GB, a gledao sam negde oko 700 - 800 MB je free kad krenem u debbuging...

@druga poruka...
kako?

A da taj niz smestim u heap? Jel bi moglo tako, nikad to nisam radio...
And don't be mad at me for crying for humanity,
call it pretensions but I got good intentions,
to keep my sanity, I'm hoping, fuck, there's gotta be
an answer to their strategies and their evil inventions... ~Looptroop
 
Odgovor na temu

Toyo

Član broj: 45193
Poruke: 227
*.kovnet.co.yu.



+1 Profil

icon Re: Compiler kao resource hogger...18.04.2005. u 15:45 - pre 231 meseci
Evo ja sam tu nesto kuckao pa mozda ti pomogne:

Pakovanje 8 booleana u 1 bajt.
U proceduri button1click je primer kako se koristi tako spakovan niz.
Sad bi mogao da imas i milijardu booleana spakovanih u milijardu/8 bajtova

Code:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, DBTables, StdCtrls;
const
  bitovi: array[0..7] of byte = (254, 253,251,247,239,223,191, 127);
type
  niz=array [0..100000000] of byte;
  pniz=^niz;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  P: pniz;
  YDim: Integer;
  Size: Integer;
implementation

{$R *.dfm}

procedure DimBoolean(var p: pniz; X, Y: Integer);
begin
  YDim := Y;
  Size := ((x*y) div 8)+1;
  getmem(p, Size);
  fillchar(p^, Size, 0);
end;

procedure SetBoolean(p:pniz; x,y:integer; value: Boolean);
var
  b,i,j: Integer;
begin
  b := (x*ydim+y);
  i := b div 8;
  j := b mod 8;
  if value then
    p^[i] := p^[i] or (1 shl j)
  else
    p^[i] := p^[i] and bitovi[j];
end;

function GetBoolean(p:pniz; x,y:integer): boolean;
var
  b,i,j: integer;
begin
  b := (x*ydim+y);
  i := b div 8;
  j := b mod 8;
  Result := (p^[i] and (1 shl j)) > 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i, j: integer;
  b:boolean;
begin
  DimBoolean(P,10,10);
  for i := 0 to 9 do
    for j := 0 to 9 do
      SetBoolean(P,i,j, True);
  for i := 0 to 9 do
    for j := 0 to 9 do
      begin
       b:=GetBoolean(P,i,j);
       setboolean(P,i,j,not b);
      end;
  FreeMem(P);
end;

end.
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.252.eunet.yu.



+1 Profil

icon Re: Compiler kao resource hogger...18.04.2005. u 21:44 - pre 231 meseci
Pa ne znam sta sve ima u FreePascal-u. Delphi ima TBits klasu pomocu koje mozes raditi efikasno sa bitovima.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Compiler kao resource hogger...

[ Pregleda: 2310 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.