🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.funkcyjne
31 messages
31 total messages Started by Lucifer Wed, 11 Dec 2002 20:47
Pewien problem z odsmiecaniem.
#114
Author: Lucifer
Date: Wed, 11 Dec 2002 20:47
16 lines
1532 bytes
Zastanawia mnie czy jest mozliwe cos takiego:

odsmiecanie bez zadnego zliczania odniesien, popsrostu kompilator 
'zgaduje', w ktorym miejscu programu nalezy zwolnic pamiec, albo wrzucic 
go do kolejki i wywalic po czasie kilka na raz.

Wydaje mi sie, ze nie, ale moze jednak. Jesli nie dla wszystkich 
alokacji to moze dla czesci, np: obiekt alokowany w bloku kodu (np: w 
funkcji, w petli), ktory w dodatku nie jest wyprowadzany na zewnatrz 
(nie jest zwracany przez funkcje, w petlach nie jest np: dodawany do 
jakiejs tablicy zaalokowanej w nadrzednym bloku lub gdziekolwiek indziej).

W skrocie obiekty sa usuwane z pamieci bez zliczania odniesien.

-- 
Lucifer
Re: Pewien problem z odsmiecaniem.
#115
Author: Tomek Czajka
Date: Wed, 11 Dec 2002 19:59
18 lines
1366 bytes
Lucifer wrote:

> Zastanawia mnie czy jest mozliwe cos takiego:
>
> odsmiecanie bez zadnego zliczania odniesien, popsrostu kompilator
> 'zgaduje', w ktorym miejscu programu nalezy zwolnic pamiec, albo wrzucic
> go do kolejki i wywalic po czasie kilka na raz.
>

Zwykle raczej nie robi sie zadnego zliczania odniesien, bo moze byc np. tak
ze zmienna A odnosi sie do zmiennej B, a zmienna B do A, chociaz o obu
juz chcielibysmy zapomniec.

Robi sie raczej jakies przechodzenie grafu odniesien, zeby zobaczyc, do
ktorych
obiektow mozna dojsc.

Tomek
Re: Pewien problem z odsmiecaniem.
#118
Author: Tomasz Zielonka
Date: Wed, 11 Dec 2002 20:00
24 lines
1707 bytes
Lucifer napisał:
> Zastanawia mnie czy jest mozliwe cos takiego:
> 
> odsmiecanie bez zadnego zliczania odniesien, popsrostu kompilator 
> 'zgaduje', w ktorym miejscu programu nalezy zwolnic pamiec, albo wrzucic 
> go do kolejki i wywalic po czasie kilka na raz.
>
> Wydaje mi sie, ze nie, ale moze jednak. Jesli nie dla wszystkich 
> alokacji to moze dla czesci, np: obiekt alokowany w bloku kodu (np: w 
> funkcji, w petli), ktory w dodatku nie jest wyprowadzany na zewnatrz 
> (nie jest zwracany przez funkcje, w petlach nie jest np: dodawany do 
> jakiejs tablicy zaalokowanej w nadrzednym bloku lub gdziekolwiek indziej).
>
> W skrocie obiekty sa usuwane z pamieci bez zliczania odniesien.

Dobrze kombinujesz :)

Zainteresuj się MLKit'em: http://www.it-c.dk/research/mlkit/

pozdrawiam,
tomek

-- 
.signature: Too many levels of symbolic links
Re: Pewien problem z odsmiecaniem.
#121
Author: Tomek Czajka
Date: Wed, 11 Dec 2002 20:03
17 lines
1512 bytes
>
> Wydaje mi sie, ze nie, ale moze jednak. Jesli nie dla wszystkich
> alokacji to moze dla czesci, np: obiekt alokowany w bloku kodu (np: w
> funkcji, w petli), ktory w dodatku nie jest wyprowadzany na zewnatrz
> (nie jest zwracany przez funkcje, w petlach nie jest np: dodawany do
> jakiejs tablicy zaalokowanej w nadrzednym bloku lub gdziekolwiek indziej).

Zwykle jak juz tworzymy obiekt, to wywolujemy jakas funkcje podajac go jej
jako parametr. No i nie wiadomo, czy ta funkcja gdzies tego obiektu nie
"schowa".

Jesli natomiast chodzi o jezyki imperatywne, to jesli tworzymy zmienna i
przekazujemy
ja tylko przez kopiowanie, to mozna rzeczywiscie przydzielic ja sobie na
stosie.

Tomek
Re: Pewien problem z odsmiecaniem.
#142
Author: Michal Przybylek
Date: Wed, 11 Dec 2002 21:56
27 lines
1770 bytes
"Lucifer" <przemek@nospam.pa55.bytom.sdi.tpnet.pl> wrote:

> Zastanawia mnie czy jest mozliwe cos takiego:
>
> odsmiecanie bez zadnego zliczania odniesien, popsrostu kompilator
> 'zgaduje', w ktorym miejscu programu nalezy zwolnic pamiec, albo
> wrzucic go do kolejki i wywalic po czasie kilka na raz.

[...]

Nie wiem, czy dobrze rozumiem, ale...


1. Nie ma zadnego zliczania odniesien (a przynajmniej ja nie slyszalem o
jakiejkolwiek zyjacej implementacji kozystajacej z tej techniki
odsmiecania [*]).

2. Tak - czasami mozna przewidziec w ktorym miejscu moze zostac zwolniona
pamiec i z miejsca wykorzystac ja ponownie. Takie cus nazywa sie "Compile
Time Garbage Collector" i poczytac o tym mozna w papierach od Mercury'ego.



[*] Paul Wilson, "Uniprocessor Garbage Collection Techniques" - do
poduszki

mp
Re: Pewien problem z odsmiecaniem.
#122
Author: Michal Przybylek
Date: Wed, 11 Dec 2002 22:28
10 lines
1229 bytes
"Tomek Czajka" <tczajka@mimuw.edu.pl> wrote:

> Jesli natomiast chodzi o jezyki imperatywne, to jesli tworzymy zmienna i
> przekazujemy
> ja tylko przez kopiowanie, to mozna rzeczywiscie przydzielic ja sobie na
> stosie.

W ogole nie rozumiem. Mozesz to jakos rozwinac ?

mp
Re: Pewien problem z odsmiecaniem.
#116
Author: Lucifer
Date: Wed, 11 Dec 2002 22:29
24 lines
1823 bytes
Tomek Czajka wrote:
> Lucifer wrote:
>
>>Zastanawia mnie czy jest mozliwe cos takiego:
>>
>>odsmiecanie bez zadnego zliczania odniesien, popsrostu kompilator
>>'zgaduje', w ktorym miejscu programu nalezy zwolnic pamiec, albo wrzucic
>>go do kolejki i wywalic po czasie kilka na raz.
> 
> Zwykle raczej nie robi sie zadnego zliczania odniesien, bo moze byc np. tak
> ze zmienna A odnosi sie do zmiennej B, a zmienna B do A, chociaz o obu
> juz chcielibysmy zapomniec.
> 
> Robi sie raczej jakies przechodzenie grafu odniesien, zeby zobaczyc, do
> ktorych
> obiektow mozna dojsc.

Nie bardzo rozumiem. Co znaczy, ze A odnosi sie do B, A jest jakas 
struktura ktora zawiera B (lub na odwrot)? Jesli A i B sa ze soba w 
jakiejkolwiek relacji to zliczanie odniesien wydaje mi sie calkiem 
mozliwe, ale niezbyt efektywne.

-- 
Lucifer
Re: Pewien problem z odsmiecaniem.
#119
Author: Lucifer
Date: Wed, 11 Dec 2002 22:34
9 lines
1233 bytes
Tomasz Zielonka wrote:

> Zainteresuj się MLKit'em: http://www.it-c.dk/research/mlkit/

Dzieki, poczytam.. Jakie sa wogole rodzaje odsmiecaczy, jak je mozna 
podzielic i scharakteryzowac?

-- 
Lucifer
Re: Pewien problem z odsmiecaniem.
#141
Author: Lucifer
Date: Wed, 11 Dec 2002 22:39
28 lines
2195 bytes
Tomek Czajka wrote:
>>Wydaje mi sie, ze nie, ale moze jednak. Jesli nie dla wszystkich
>>alokacji to moze dla czesci, np: obiekt alokowany w bloku kodu (np: w
>>funkcji, w petli), ktory w dodatku nie jest wyprowadzany na zewnatrz
>>(nie jest zwracany przez funkcje, w petlach nie jest np: dodawany do
>>jakiejs tablicy zaalokowanej w nadrzednym bloku lub gdziekolwiek indziej).
> 
> 
> Zwykle jak juz tworzymy obiekt, to wywolujemy jakas funkcje podajac go jej
> jako parametr. No i nie wiadomo, czy ta funkcja gdzies tego obiektu nie
> "schowa".

Nie wiadomo jesli kompilator generuje bezposrednio asemblera (w 
przypadku kompilacji do natywnego kodu). Jesli np: generowalby cos 
jeszcze posredniego - cos w czym zliczalby ilosc uzyc (i skutecznie 
eliminowalby martwy, nieuzywalny kod i wogole wkladalby do takiego 
rezultatu mnostwo innych informacji) to chyba byloby to mozliwe.

> Jesli natomiast chodzi o jezyki imperatywne, to jesli tworzymy zmienna i
> przekazujemy
> ja tylko przez kopiowanie, to mozna rzeczywiscie przydzielic ja sobie na
> stosie.

To chyba niezbyt efektywnie wychodzi (duze obiekty na stosie) w 
przypadku zwracania.

-- 
Lucifer
Re: Pewien problem z odsmiecaniem.
#117
Author: Tomasz Zielonka
Date: Wed, 11 Dec 2002 23:23
47 lines
2391 bytes
Lucifer napisał:
> Tomek Czajka wrote:
>
>> Zwykle raczej nie robi sie zadnego zliczania odniesien, bo moze byc np. tak
>> ze zmienna A odnosi sie do zmiennej B, a zmienna B do A, chociaz o obu
>> juz chcielibysmy zapomniec.
> 
> Nie bardzo rozumiem. Co znaczy, ze A odnosi sie do B, A jest jakas 
> struktura ktora zawiera B (lub na odwrot)? Jesli A i B sa ze soba w 
> jakiejkolwiek relacji to zliczanie odniesien wydaje mi sie calkiem 
> mozliwe, ale niezbyt efektywne.

Jeśli w grafie odwołań występują cykle, samo zliczanie odniesień nie
wystarcza.

Przykład: W bibliotece Boost dla C++ są sprytne-wskaźniki zliczające
odniesienia - boost::shared_ptr<T>. Nie są one odporne na cykle:

  #include <boost/shared_ptr.hpp>
  #include <iostream>

  struct A
  {
      boost::shared_ptr<A> aptr;
      A() { std::cout << "A()" << std::endl; }
      ~A() { std::cout << "~A()" << std::endl; }
  };

  int main()
  {
      boost::shared_ptr<A> ap (new A());
      ap->aptr = ap; // Skompiluj z tą linią / bez tej linii - jest
		     // różnica?
  }

Właściwie nie znam żadnej poważnej implementacji języka funkcyjnego,
która używałaby zliczania odniesień jako podstawowej metody odśmiecania.

Chyba, że mówimy od gwarantowaniu na poziomie systemu typów, że dla
pewnych obiektów ilość odniesień wynosi co najwyżej 1 - wtedy kłania się
Clean (i chyba Mercury?).

pozdrawiam,
tomek

-- 
.signature: Too many levels of symbolic links
Re: Pewien problem z odsmiecaniem.
#143
Author: Lucifer
Date: Thu, 12 Dec 2002 01:07
31 lines
1990 bytes
Michal Przybylek wrote:
> "Lucifer" <przemek@nospam.pa55.bytom.sdi.tpnet.pl> wrote:
> 
> 
>>Zastanawia mnie czy jest mozliwe cos takiego:
>>
>>odsmiecanie bez zadnego zliczania odniesien, popsrostu kompilator
>>'zgaduje', w ktorym miejscu programu nalezy zwolnic pamiec, albo
>>wrzucic go do kolejki i wywalic po czasie kilka na raz.
> 
> 
> [...]
> 
> Nie wiem, czy dobrze rozumiem, ale...
> 
> 
> 1. Nie ma zadnego zliczania odniesien (a przynajmniej ja nie slyszalem o
> jakiejkolwiek zyjacej implementacji kozystajacej z tej techniki
> odsmiecania [*]).

O zliczaniu odniesien wiem z pewnych zrodel w C, jak to jest 
zorganizowane w normalnych jezykach nie mam pojecia. Myslalem ze podobnie.

> 2. Tak - czasami mozna przewidziec w ktorym miejscu moze zostac zwolniona
> pamiec i z miejsca wykorzystac ja ponownie. Takie cus nazywa sie "Compile
> Time Garbage Collector" i poczytac o tym mozna w papierach od Mercury'ego.

Ok, dzieki.

-- 
Lucifer
Re: Pewien problem z odsmiecaniem.
#144
Author: Mariusz K. Grzeca
Date: Thu, 12 Dec 2002 12:53
33 lines
2894 bytes
Lucifer wrote:

> Zastanawia mnie czy jest mozliwe cos takiego:
>
> odsmiecanie bez zadnego zliczania odniesien, popsrostu kompilator
> 'zgaduje', w ktorym miejscu programu nalezy zwolnic pamiec, albo 
> wrzucic go do kolejki i wywalic po czasie kilka na raz.

Jeśli chodzi o automatyczne zarządzanie pamięcią, ale całkowicie 
pozbawione ciężkich mechanizmów czasu wykonania programu, takich jak 
liczniki referencji, czy odśmiecacze śledzące dowiązania (tracing 
garbage collectors), to w ogólnym przypadku, dla dowolnego języka, 
zapewniające brak wycieków pamięci - nie, nie jest znane takie rozwiązanie.

Niestety bardzo długo języki wysokopoziomowe (czyli te, które m.in. 
zwalniają programistę z konieczności "ręcznego" zwalniania pamięci) nie 
wzbudzały żadnego zainteresowania przemysłu. Być może dlatego (albo 
dlatego że to trudny problem) na temat automatycznej gospodarki pamięcią 
(w ogole) powiedziano stosunkowo niewiele. Pojedynczy człowiek jest w 
stanie w ciągu kilkudziesięciu długich wieczorów przeczytać i zrozumieć 
wszystkie publikacje poruszające ten temat. Tych wnoszących do tematu 
coś rzeczywiście istotnego jest może ze dwadzieścia... O odśmiecaniu 
czasu kompilacji (compile-time gargabe collection) wiadomo bardzo niewiele.

Było trochę na ten temat (CTGC) w związku z badaniami nad wydajnością 
Javy. Możesz się czuć dumny bo w zasadzie doszedłeś do tego jak to może 
być zrealizowane :) - za pomocą prostej, syntaktycznej analizy kodu 
programu. Było trochę przy okazji zastosowań różnych form analizy 
przepływu danych i sterowania - jest np. jeden papier na temat analizy 
reprezentacji danych w kompilatorze Bigloo ("Storage Usage Analysis and 
its Applications" Manuel Serrano, Mark Feeley). Było też trochę na temat 
zastosowania systemu typów i mechanizmów rekonstrukcji typów do tego 
celu w związku z kompilatorem MLKit (link podał Tomek).
Re: Pewien problem z odsmiecaniem.
#120
Author: Mariusz K. Grzeca
Date: Thu, 12 Dec 2002 13:19
70 lines
3252 bytes
Lucifer wrote:

> Dzieki, poczytam.. Jakie sa wogole rodzaje odsmiecaczy, jak je mozna
> podzielic i scharakteryzowac?

Np. podział ze względu na mechanizm znajdowania śmieci:

liczniki odniesień (reference counting) vs odśmiecacze śledzące (tracing 
garbage collectors).

zalety liczników odniesień:

* łatwo zaimplementować
* przy leniwym niszczeniu obiektów zapewniają minimalne przerwy w 
działaniu programu
* pozwalają szybko odzyskiwać pamięć (już w momencie, gdy obiekt traci 
ostatnie dowiązanie)

wady:

* nie są w stanie zwolnić struktur cyklicznych (problem wyjaśnił Tomek)
* wykonują zawsze pracę proporcjonalną do pracy wykonywanej przez 
program, a nie do tempa alokacji obiektów, czy też tempa tworzenia śmieci
* są zazwyczaj zbudowane w oparciu o normalny malloco-podobny alokator 
ogólnego przeznaczenią, więc posiadają te same co on wady - fragmentują 
pamięć, duży średni koszt alokacji/dealokacji pojedynczego obiektu

W praktyce nie używa się ich...

Odśmiecacze śledzące:

najprostszy, naiwny odśmiecacz typu mark-and-sweep działa następująco:

* mamy sterte o określonym rozmiarze, np. 100 kilo.
* gdy jest na niej za mało wolnego miejsca, by zrealizować aktualne 
żądanie akokacji pamięci zatrzymujemy działanie programu.
* zaczynając od obiektów statycznie zaalokowanych, oraz mających 
dowiązania w rejestrach i na stosie śledzimy graf dowiązań
* wszystkie obiekty, do których trafiamy zaznaczamy jako "żywe" (np. 
korzystając ze specjalnego pola bitowego w nagłówku obiektu).
* po przejrzeniu całego grafu przeglądamy liniowo stertę i "usuwamy" 
wszystkie obiekty, które nie są "żywe", pozostałe "odznaczamy".

zalety:
* wykonuje zawsze pracę proporcjonalną do tempa alokacji obiektów
* zależne od typu, implementacji i zastosowania

wady:
* zależne od typu, implementacji i zastosowania

Same śledzące można podzielić na:

kopiujące i typu mark-and-sweep

albo na:

generacyjne i niegeneracyjne

albo na:

typu stop-and-collect, inkrementalne, współbieżne i równoległe

albo na:

konserwatywne i precyzyjne.



Najlepszym źródłem wiedzy na ten temat jest wspomniany przez Michała 
papier Wilsona...
Re: Pewien problem z odsmiecaniem.
#123
Author: Tomek Czajka
Date: Thu, 12 Dec 2002 15:09
17 lines
1483 bytes
>
> > Jesli natomiast chodzi o jezyki imperatywne, to jesli tworzymy zmienna i
> > przekazujemy
> > ja tylko przez kopiowanie, to mozna rzeczywiscie przydzielic ja sobie na
> > stosie.
>
> W ogole nie rozumiem. Mozesz to jakos rozwinac ?

Chodzilo mi po prostu o to, ze sa takie czeste proste przypadki, kiedy widac
kiedy obiekt nalezy przydzielic a kiedy zwolnic, np. gdy w bloku kodu
tworzymy
sobie lokalna zmienna typu Integer i nie dajemy nikomu wskaznika do niej -
wtedy dokladnie wiadomo, ze na taka zmienna mozemy przydzielic pamiec (na
stosie)
przy wejsciu do tego bloku kodu i zwolnic przy wyjsciu.

Tomek
Re: Pewien problem z odsmiecaniem.
#124
Author: Mariusz K. Grzeca
Date: Thu, 12 Dec 2002 15:35
9 lines
1544 bytes
On Thu, 12 Dec 2002, Tomek Czajka wrote:

> Chodzilo mi po prostu o to, ze sa takie czeste proste przypadki, kiedy widac
> kiedy obiekt nalezy przydzielic a kiedy zwolnic, np. gdy w bloku kodu
> tworzymy
> sobie lokalna zmienna typu Integer

Integer mieści się zazwyczaj w pojedynczym słowie maszynowym więc w
ogole nie ma sensu na niego alokować pamięci ;)
Re: Pewien problem z odsmiecaniem.
#125
Author: Tomasz Zielonka
Date: Thu, 12 Dec 2002 16:43
15 lines
1452 bytes
Mariusz K. Grzeca napisał:
> On Thu, 12 Dec 2002, Tomek Czajka wrote:
> 
> Integer mieści się zazwyczaj w pojedynczym słowie maszynowym więc w
> ogole nie ma sensu na niego alokować pamięci ;)

Ze znanych mi języków chyba tylko Haskell ma typ, który nazywa się
_dokłanie_ Integer (nieograniczone liczby całkowite) i on się raczej nie
mieści w pojedynczym słowie maszynowym :)

pozdr
tomek

-- 
.signature: Too many levels of symbolic links
Re: Pewien problem z odsmiecaniem.
#126
Author: Mariusz K. Grzeca
Date: Thu, 12 Dec 2002 17:49
7 lines
1599 bytes
On Thu, 12 Dec 2002, Tomasz Zielonka wrote:

> Ze znanych mi języków chyba tylko Haskell ma typ, który nazywa się
> _dokłanie_ Integer (nieograniczone liczby całkowite) i on się raczej nie
> mieści w pojedynczym słowie maszynowym :)

Ej, to ja tu jestem od czepiania się słówek ;P
Re: Pewien problem z odsmiecaniem.
#127
Author: Michal Przybylek
Date: Thu, 12 Dec 2002 20:10
10 lines
1460 bytes
"Tomasz Zielonka" <t.zielonka@students.mimuw.edu.pl> wrote:

> Ze znanych mi języków chyba tylko Haskell ma typ, który nazywa się
> _dokłanie_ Integer (nieograniczone liczby całkowite) i on się raczej nie
> mieści w pojedynczym słowie maszynowym :)

Chociazby Eiffel (i miesci sie w pojedynczym slowie maszynowym).
:-P

mp
Re: Pewien problem z odsmiecaniem.
#130
Author: Michal Przybylek
Date: Thu, 12 Dec 2002 20:10
12 lines
1471 bytes
"Mariusz K. Grzeca" <mgrzeca@sokrates.mimuw.edu.pl> wrote:

> Integer mieści się zazwyczaj w pojedynczym słowie maszynowym więc w
> ogole nie ma sensu na niego alokować pamięci ;)

Nie w jezykach z dynamicznymi typami :-P

Zdaje sie, ze w ten sposob postepuja Allegro i CMUCL przy odpowiednich
deklaracjach dla obiektow liczbopodobnych. Glowy jednak nie dam.


mp
Re: Pewien problem z odsmiecaniem.
#140
Author: Michal Przybylek
Date: Thu, 12 Dec 2002 20:10
15 lines
1609 bytes
"Tomek Czajka" <tczajka@mimuw.edu.pl> wrote:

> Chodzilo mi po prostu o to, ze sa takie czeste proste przypadki, kiedy
> widac kiedy obiekt nalezy przydzielic a kiedy zwolnic, np. gdy w bloku
> kodu tworzymy sobie lokalna zmienna typu Integer i nie dajemy nikomu
> wskaznika do niej - wtedy dokladnie wiadomo, ze na taka zmienna
> mozemy przydzielic pamiec (na stosie)
> przy wejsciu do tego bloku kodu i zwolnic przy wyjsciu.

Ok, rozumiem.

[BTW: nie dokladnie wiadomo - a przynajmniej nie zawsze (np. przy
uniwersalnym srodowisku najczesciej nie mozemy byc pewni niczego)]

mp
Re: Pewien problem z odsmiecaniem.
#128
Author: Tomek Czajka
Date: Fri, 13 Dec 2002 00:47
8 lines
1344 bytes
> Ze znanych mi jêzyków chyba tylko Haskell ma typ, który nazywa siê
> _dok³anie_ Integer (nieograniczone liczby ca³kowite) i on siê raczej nie
> mie¶ci w pojedynczym s³owie maszynowym :)

Ja znam jeszcze Integer z Pascala - we FreePascalu miesci sie on w polowie
slowa maszynowego :-)

Tomek
Re: Pewien problem z odsmiecaniem.
#136
Author: Tomek Czajka
Date: Fri, 13 Dec 2002 00:49
6 lines
1193 bytes
> Integer mie¶ci siê zazwyczaj w pojedynczym s³owie maszynowym wiêc w
> ogole nie ma sensu na niego alokowaæ pamiêci ;)

No jak to nie - trzeba chocby to jedno slowo maszynowe zaalokowac.

Tomek
Re: Pewien problem z odsmiecaniem.
#131
Author: Mariusz K. Grzeca
Date: Fri, 13 Dec 2002 01:58
6 lines
1496 bytes
On Thu, 12 Dec 2002, Michal Przybylek wrote:

> Nie w jezykach z dynamicznymi typami :-P

Dlaczego nie? Wiekszość mi znanych używa unboxowanych, otagowanych
intów. Boxowanie inta nie ma sensu...
Re: Pewien problem z odsmiecaniem.
#137
Author: Mariusz K. Grzeca
Date: Fri, 13 Dec 2002 02:04
11 lines
1799 bytes
On Fri, 13 Dec 2002, Tomek Czajka wrote:

> > Integer mieści się zazwyczaj w pojedynczym słowie maszynowym więc w
> > ogole nie ma sensu na niego alokować pamięci ;)
> 
> No jak to nie - trzeba chocby to jedno slowo maszynowe zaalokowac.

Nie, ponieważ mieści się w rejestrze, w pojedynczym słowie na stosie i
jest unboxowany (ale być może otagowany) w innych strukturach. intów
się raczej nie boxuje, tym samym nie alokuję sie pamięci specjalnie
dla nich.
Re: Pewien problem z odsmiecaniem.
#132
Author: Michal Przybylek
Date: Fri, 13 Dec 2002 09:30
19 lines
1976 bytes
"Mariusz K. Grzeca" <mgrzeca@sokrates.mimuw.edu.pl> wrote:

> > Nie w jezykach z dynamicznymi typami :-P
>
> Dlaczego nie? Wiekszość mi znanych używa unboxowanych,
> otagowanych intów. Boxowanie inta nie ma sensu...

Wlasnie dlatego, ze to nie jest normalny "int".

Problemy sa dwa - drozsze operacje (bez jaj - przeciez to ma podchodzic pod
optymalizowane C ;-)) i niezadko bardzo mala dlugosc liczby (np. nieboxowany
fixnum pod LispWorks'em jest <= 8388607, pod CL'em <= 2^24-1 [standard
gwarantuje 2^15-1]). Jeszcze gorzej jest z nieboxowanymi floatami (w
praktyce gdzies ok. 20 bitow). Wartosci te sa dla wielu zastosowaniach na
tyle smieszne, ze dobre kompilatory musza pozwalac na uzywanie nieboxowanych
i nietagowanych liczb.


mp
Re: Pewien problem z odsmiecaniem.
#133
Author: Michal Przybylek
Date: Fri, 13 Dec 2002 13:05
16 lines
1496 bytes
"Mariusz K. Grzeca" <mgrzeca@sokrates.mimuw.edu.pl> wrote

> > Nie w jezykach z dynamicznymi typami :-P
>
> Dlaczego nie?

A... juz widze.

Mowiac:

"Zdaje sie, ze w ten sposob postepuja..."

mailalem na mysli trzymanie pelnego integera na stosie.


mp
Re: Pewien problem z odsmiecaniem.
#129
Author: Adam Przybyla
Date: Fri, 13 Dec 2002 14:12
10 lines
1666 bytes
Tomek Czajka <tczajka@mimuw.edu.pl> wrote:
>> Ze znanych mi j?zyków chyba tylko Haskell ma typ, który nazywa si?
>> _dok?anie_ Integer (nieograniczone liczby ca?kowite) i on si? raczej nie
>> mie?ci w pojedynczym s?owie maszynowym :)

> Ja znam jeszcze Integer z Pascala - we FreePascalu miesci sie on w polowie
> slowa maszynowego :-)
	... no jeszcze kilka innych jezykow ma takie dlugie int'y;-)
Patrz lisp, Python itp. Z powazaniem
								Adam Przybyla
Re: Pewien problem z odsmiecaniem - [OT] pytanko od lamera
#134
Author: soovack
Date: Fri, 13 Dec 2002 18:32
14 lines
1655 bytes
Użytkownik "Mariusz K. Grzeca" <mgrzeca@sokrates.mimuw.edu.pl> napisał w
wiadomości
news:Pine.LNX.4.44L.0212130256590.2284-100000@sokrates.mimuw.edu.pl...
> > Nie w jezykach z dynamicznymi typami :-P
>
> Dlaczego nie? Wiekszość mi znanych używa unboxowanych, otagowanych
> intów. Boxowanie inta nie ma sensu...
>
Prosze o wyjasnienie terminow:
boxowany
otagowany
Z gory dziekuje za pomoc.
Pozdrawiam,
soovack
Re: Pewien problem z odsmiecaniem.
#138
Author: Tomek Czajka
Date: Fri, 13 Dec 2002 19:34
18 lines
1742 bytes
>
> > > Integer mie¶ci siê zazwyczaj w pojedynczym s³owie maszynowym wiêc w
> > > ogole nie ma sensu na niego alokowaæ pamiêci ;)
> >
> > No jak to nie - trzeba chocby to jedno slowo maszynowe zaalokowac.
>
> Nie, poniewa¿ mie¶ci siê w rejestrze, w pojedynczym s³owie na stosie i
> jest unboxowany (ale byæ mo¿e otagowany) w innych strukturach. intów
> siê raczej nie boxuje, tym samym nie alokujê sie pamiêci specjalnie
> dla nich.

No chyba alokacje w rejestrze albo na stosie tez sie nazywa alokacja.
Zreszta
w rejestrach to zbyt duzo tych zmiennych sie nie pomiesci (szczegolnie dla

funkcji rekurencyjnych).

Tomek
Re: Pewien problem z odsmiecaniem.
#139
Author: Mariusz K. Grzeca
Date: Sat, 14 Dec 2002 15:02
5 lines
1338 bytes
Tomek Czajka wrote:

> No chyba alokacje w rejestrze albo na stosie tez sie nazywa alokacja.

Ale to co innego...
Re: Pewien problem z odsmiecaniem - [OT] pytanko od lamera
#135
Author: soovack
Date: Sun, 15 Dec 2002 01:15
17 lines
1747 bytes
Użytkownik "soovack" <soovack@gazeta.pl> napisał w wiadomości
news:atdcqn$bin$2@news.tpi.pl...
> Prosze o wyjasnienie terminow:
> boxowany
> otagowany
>
Juz sam znalazlem odpowiedz.
Przepraszam za banalne pytanie - nastepnym razem
zapuszcze sobie googla zanim publicznie popisze sie
swoja niewiedza.
soovack

ps.
Dla takich lamerow jak ja ktorzy byc moze beda zainteresowani
tym tematem podaje linka do ciekawej strony o zarzadzaniu
pamiecia - www.memorymanagement.org - tu jest chyba
wszystko co wypada wiedziec.
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