Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Alokacja RAM

35 views
Skip to first unread message

apl

unread,
Apr 5, 2022, 10:40:34 AM4/5/22
to
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

Roman Tyczka

unread,
Apr 7, 2022, 2:34:28 PM4/7/22
to
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

apl

unread,
Apr 8, 2022, 3:27:16 PM4/8/22
to
EEEE.... weź Romek i przeczytaj jeszcze raz, dasz radę, dasz!

Roman Tyczka

unread,
Apr 9, 2022, 11:44:30 AM4/9/22
to
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

apl

unread,
Apr 10, 2022, 4:08:09 AM4/10/22
to
OK, mistrzu ciętej riposty. To teraz napisz, jak byś określił maksymalny rozmiar RAM, którą mógłbyś przydzielić pewnej strukturze.

Roman Tyczka

unread,
Apr 11, 2022, 2:41:10 PM4/11/22
to
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

apl

unread,
Apr 12, 2022, 6:35:16 AM4/12/22
to
> 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

miab

unread,
Apr 13, 2022, 10:32:02 AM4/13/22
to
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

Roman Tyczka

unread,
Apr 13, 2022, 10:37:02 AM4/13/22
to
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

apl

unread,
Apr 14, 2022, 3:46:11 AM4/14/22
to
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
0 new messages