🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi
10 messages
10 total messages Started by apl Tue, 05 Apr 2022 07:40
Alokacja RAM
#294650
Author: apl
Date: Tue, 05 Apr 2022 07:40
58 lines
2927 bytes
Możliwości alokacji RAM są w Delphi ograniczone. W TP graniczną wartością było 64 kB, co prawdopodobnie wynikało z 16 bitowej architektury tego kompilatora. W D. 10.4 można by analogicznie oczekiwać górnej granicy=2^32 bajtów. Okazuje się jednak, że jest to ok. 2^30,8 bajtów. W TP można było tworzyć stertę aby przezwyciężyć te ograniczenia. Próbowałem zrobić to samo w D.10.4, starając się przy tym znaleźć największe osiągalne rozmiary warstw sterty. Posłużyłem się w tym celu metodą obramowania celu stosując instrukcję try...except w charakterze if then  else, wychodząc od rozmiaru alokowanego bloku RAM Up > 2^32. Postępowanie realizowałem wg schematu:

	a:=UP; b:=0; P:=Up; OK:=True; step:=0;
	b1:=b;
	repeat
  	  inc(step);
  	 try
	   setLength(heapLayer,0);
   	   setLengt(heapLayer,P);
   	   a1:=a; b1:=b;
 	   OK:=True;
 	   b:=P;
 	   P:=(a+b) div 2;
	 except
 	  setLength(heapLayer,0);
 	  a:=P;
 	  P:=(a+b) div 2;
 	  OK:=false;
	 end;
 	until OK and ((b1=b) or (b=P) or (step=1));

Warunkiem stabilnego działania okazało się zerowanie rozmiaru warstwy zarówno przed próbą alokacji RAM o rozmiarze P w części try, jak i w części except - po nieudanej próbie. Warunek OK and ((b1=b) or (b=P)) przerywa iterację, gdy wynik powtórzył się, lub gdy trafił w centrum, zaś OK and (step=1) przerywa działanie, gdy warstwie z sukcesem alokowana jest RAM już przy P=Up (jak to będzie mieć miejsce przy małych wielkościach alokowanej RAM.

Celem było określenie maksymalnej wartości kęsu RAM, jaki można zaalokować jakiejś zmiennej dynamicznej i zbadanie, czy wielkość ta będzie taka sama dla innych alokacji, w tym przypadku - czy każdej kolejnej warstwie sterty można alokować taki sam kęs RAM, jaki określono dla pierwszej warstwy bez ryzyka, że nie zawsze będzie to akceptowane.
Metoda daje akceptowalne oceny, ale daje różne wartości kęsów dla kolejnych warstw sterty (rozbieżność nawet rzędu 1%). Niekiedy pętla repeat nie jest od razu przerywana mimo spełnienia warunku kończącego.
Wniosek: ten sposób określenia maksymalnego kęsu RAM napotyka nieznane problemy techniczne. Mam nadzieję na interesujące kontrpropozycje.
Programik (postać exe i kod w D.10.4) o nazwie maxHeap realizujący tę metodę można pobrać ze strony https://apl.home.amu.edu.pl/apl/. 
Miłej zabawy! 
apl
Re: Alokacja RAM
#294651
Author: Roman Tyczka
Date: Thu, 07 Apr 2022 20:34
10 lines
203 bytes
On 05.04.2022 16:40, apl wrote:
> Miłej zabawy!
> apl

Mówisz, że metodą obramowania celu pobierałeś kęsy ramu do wyzerowanej
warstwy sterty?
No, grubo, ty mnie zaimponowałeś...

--
pzdr
Roman
Re: Alokacja RAM
#294652
Author: apl
Date: Fri, 08 Apr 2022 12:27
14 lines
441 bytes
czwartek, 7 kwietnia 2022 o 20:34:28 UTC+2 Roman Tyczka napisał(a):
> On 05.04.2022 16:40, apl wrote: 
> > Miłej zabawy! 
> > apl 
> 
> Mówisz, że metodą obramowania celu pobierałeś kęsy ramu do wyzerowanej 
> warstwy sterty? 
> No, grubo, ty mnie zaimponowałeś... 
> 
> -- 
> pzdr 
> Roman
EEEE.... weź Romek i przeczytaj jeszcze raz, dasz radę, dasz!
Re: Alokacja RAM
#294653
Author: Roman Tyczka
Date: Sat, 09 Apr 2022 17:44
13 lines
356 bytes
On 08.04.2022 21:27, apl wrote:
>> Mówisz, że metodą obramowania celu pobierałeś kęsy ramu do wyzerowanej
>> warstwy sterty?
>> No, grubo, ty mnie zaimponowałeś...
>> --
>> pzdr
>> Roman
> EEEE.... weź Romek i przeczytaj jeszcze raz, dasz radę, dasz!

Dam... tylko po co? Jak się zechcę oczytać bzdetów to pójdę na pudelka.

--
pzdr
Roman
Re: Alokacja RAM
#294654
Author: apl
Date: Sun, 10 Apr 2022 01:08
18 lines
740 bytes
sobota, 9 kwietnia 2022 o 17:44:30 UTC+2 Roman Tyczka napisał(a):
> On 08.04.2022 21:27, apl wrote: 
> >> Mówisz, że metodą obramowania celu pobierałeś kęsy ramu do wyzerowanej 
> >> warstwy sterty? 
> >> No, grubo, ty mnie zaimponowałeś... 
> >> -- 
> >> pzdr 
> >> Roman 
> > EEEE.... weź Romek i przeczytaj jeszcze raz, dasz radę, dasz!
> Dam... tylko po co? Jak się zechcę oczytać bzdetów to pójdę na pudelka. 
> 
> -- 
> pzdr 
> Roman
OK, mistrzu ciętej riposty. To teraz napisz, jak byś określił maksymalny rozmiar RAM, którą mógłbyś przydzielić pewnej strukturze.
Re: Alokacja RAM
#294655
Author: Roman Tyczka
Date: Mon, 11 Apr 2022 20:41
22 lines
979 bytes
On 10.04.2022 10:08, apl wrote:
>>>> Mówisz, że metodą obramowania celu pobierałeś kęsy ramu do wyzerowanej
>>>> warstwy sterty?
>>>> No, grubo, ty mnie zaimponowałeś...
>>>> --
>>>> pzdr
>>>> Roman
>>> EEEE.... weź Romek i przeczytaj jeszcze raz, dasz radę, dasz!
>> Dam... tylko po co? Jak się zechcę oczytać bzdetów to pójdę na pudelka.
>>
> OK, mistrzu ciętej riposty. To teraz napisz, jak byś określił maksymalny rozmiar RAM, którą mógłbyś przydzielić pewnej strukturze.

Zacząłbym od zmiany tej struktury na taką, która nie jest jednolitym
blokiem pamięci, bo w przeciwieństwie do Ciebie wiem, że ram podlega
fragmentacji i nawet jeśli raz uda Ci się zaalokować w testowej apce
2GiB w jednym kawałku, to drugim razem maksymalny ciągły obszar to
będzie 100MiB, a trzecim 10MiB. Zatem... nie szukaj rozwiązania problemu
alokacji olbrzymiego fragmentu ramu tylko przemyśl tę strukturę i zrób
ją dynamiczną.

--
pzdr
Roman
Re: Alokacja RAM
#294658
Author: apl
Date: Tue, 12 Apr 2022 03:35
21 lines
766 bytes
> Zacząłbym od zmiany tej struktury na taką, która nie jest jednolitym 
> blokiem pamięci, bo w przeciwieństwie do Ciebie wiem, że ram podlega 
> fragmentacji i nawet jeśli raz uda Ci się zaalokować w testowej apce 
> 2GiB w jednym kawałku, to drugim razem maksymalny ciągły obszar to 
> będzie 100MiB, a trzecim 10MiB. Zatem... nie szukaj rozwiązania problemu 
> alokacji olbrzymiego fragmentu ramu tylko przemyśl tę strukturę i zrób 
> ją dynamiczną. 
> 
> -- 
> pzdr 
> Roman
Witam!
Ciekawe, co piszesz o tym pofragmentowaniu RAM. Jak udaje ci się pokonać to niewątpliwe źródło chaosu?
pzdr
APL
Re: Alokacja RAM
#294661
Author: miab
Date: Wed, 13 Apr 2022 16:31
7 lines
495 bytes
W dniu 05-04-2022 o 15:40, apl pisze:
> Możliwości alokacji RAM są w Delphi ograniczone. W TP graniczną wartością było 64 kB, co prawdopodobnie wynikało z 16 bitowej architektury tego kompilatora. W D. 10.4 można by analogicznie oczekiwać górnej granicy=2^32 bajtów. Okazuje się jednak, że jest to ok. 2^30,8 bajtów. W

W Windows w aplikacjach 32-bitowych raczej 2^31(chyba ze użyjesz
specjalnych sztuczek to dociągniesz w pobliże 2^32)
Dlaczego nie użyjesz 64 bitów?

miab
Re: Alokacja RAM
#294660
Author: Roman Tyczka
Date: Wed, 13 Apr 2022 16:36
9 lines
349 bytes
On 12.04.2022 12:35, apl wrote:
> Ciekawe, co piszesz o tym pofragmentowaniu RAM. Jak udaje ci się pokonać to niewątpliwe źródło chaosu?

Jakiego chaosu? I co miałbym pokonywać? Żyjemy chyba w innej
rzeczywistości, Ty walczysz z problemami, które sam stwarzasz, ja w tym
czasie piszę kod rozwiązujący problemy realne.

--
pzdr
Roman
Re: Alokacja RAM
#294662
Author: apl
Date: Thu, 14 Apr 2022 00:46
23 lines
1072 bytes
środa, 13 kwietnia 2022 o 16:37:02 UTC+2 Roman Tyczka napisał(a):
> On 12.04.2022 12:35, apl wrote: 
> > Ciekawe, co piszesz o tym pofragmentowaniu RAM. Jak udaje ci się pokonać to niewątpliwe źródło chaosu?
> Jakiego chaosu? I co miałbym pokonywać? Żyjemy chyba w innej 
> rzeczywistości, Ty walczysz z problemami, które sam stwarzasz, ja w tym 
> czasie piszę kod rozwiązujący problemy realne. 
> 
> -- 
> pzdr 
> Roman

Oj, nie tworzę problemów, tylko napotykam, pokonuję i sygnalizuję. Być może 64 bitowy kompilator przesunie poprzeczkę w górę, ale póki co cieszę się 32 bitowymi. Sygnalizuję ku przestrodze tym, którzy pragną szerzej udostępniać swój soft. Może lepiej od razu budować stertę z mniejszych kawałków, aby tworzyć coś bardziej uniwersalnego. Dzięki za odzew, wesołych świąt!
Pozdrawiam,
APL
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads