🚀 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 14:40
Alokacja RAM
#347206
Author: apl
Date: Tue, 05 Apr 2022 14:40
29 lines
3567 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
#347207
Author: Roman Tyczka
Date: Thu, 07 Apr 2022 18:34
11 lines
1450 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
#347208
Author: apl
Date: Fri, 08 Apr 2022 19:27
13 lines
1750 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
#347209
Author: Roman Tyczka
Date: Sat, 09 Apr 2022 15:44
14 lines
1638 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
#347210
Author: apl
Date: Sun, 10 Apr 2022 08:08
15 lines
2090 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
#347211
Author: Roman Tyczka
Date: Mon, 11 Apr 2022 18:41
23 lines
2444 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
#347212
Author: apl
Date: Tue, 12 Apr 2022 10:35
15 lines
2175 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
#347213
Author: Roman Tyczka
Date: Wed, 13 Apr 2022 14:36
10 lines
1805 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
#347215
Author: miab
Date: Wed, 13 Apr 2022 15:31
8 lines
1625 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
#347214
Author: apl
Date: Thu, 14 Apr 2022 07:46
14 lines
2505 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