-
Data: 2011-05-06 09:44:57
Temat: Re: typologia errorow aplikacji (a jeszcze leipaj i realoki)
Od: Andrzej Jarzabek <a...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On May 6, 5:39 am, "Wojciech \"Spook\" Sura"
<wojciech.sura_no@spam_poczta.medi.com.pl> wrote:
> Dnia 03-05-2011 o 01:14:36 Andrzej Jarzabek <a...@g...com>
> napisał(a):
>
> > On 02/05/2011 22:06, f...@W...gazeta.pl wrote:
> >> czyli w skrocie -> ZAPCHANIE sobie tablicy (przez bledy w poodznaczaniu
> >> flag) to nie WYCIEKI
>
> > To są wycieki.
>
> Kwestia definicji. Program nadal może dostać się do "zapchanych" elementów
> tablicy jawnie ją indeksując.
Co to znaczy "program może"? Jeśli z algorytmu programu wynika, że
nigdy się do tego elementu nie dostanie, to przecież nie może. Jeśli
zmienimy mu kod to owszem, będzie mógł, ale to samo dotyczy dowolnego
programu z wyciekami: odpowiednio zmieniając kod można doprowadzić do
tego, że wycieków nie będzie.
> Ba, można banalnie łatwo napisać odśmiecacz,
> który z powrotem odzyska nieużywane rekordy.
Nie można, jeśli nie jesteś w stanie określić, które rekordy są w
danym momencie używane.
Poza tym fakt, że można napisać odśmiecacz nie znaczy, że program
_bez_ tego odśmiecacza nie ma wycieków.
Poza tym weź pod uwagę, że struktury sterty, z których korzystają
malloc i free też raczej trzymają (a przynajmniej mogą trzymać)
namiary na każdy z bloków zaalokowanych przez malloc, niezależnie od
tego, czy kliencki kod otrzymane uchwyty (wskaźniki) jeszcze gdzieś
trzyma, czy nie. Dla klienckiego kodu te struktury są rzecz jasna
niedostępne, ale kod funkcji malloc czy free może z powodzeniem czytać
i modyfikować te struktury, które odpowiadają "wyciekniętej" pamięci.
A przecież kod biblioteki i jej struktury danych stają się częścią
programu po zlinkowaniu.
> Tylko że Firowi _cały czas chodzi o fizyczne wycieki_, a nie o logiczne,
Fizyczne wycieki to możesz mieć najwyżej w komputerze chłodzonym
wodą. :)
> związane z konstrukcją programu. Tobie zaś chodzi o logiczne (w których
> zawierają się fizyczne) i dlatego obaj kłócicie się bezproduktywnie.
Och, jeśli zdefiniujesz "fizyczne wycieki" jako "wycieki spowodowane
przez użycie malloc", to naturalnie takich wycieków nie ma w
programie, który nie używa malloc. Mogą być w nim wycieki w sensie
wycieki tak w ogóle, w którym to sensie zawierają się oczywiście
również wycieki spowodowane użyciem malloc.
Dwa pytania: wiedząc, jak dana implementacja biblioteki libc
implementuje stertę, w zależności od interpretacji możliwe może być
dostanie się do dowolnych wcześniej zaalokowanych przez malloc bloków,
w sposób nieprzenośny (generalnie czytając metadane np. zajmujące ileś-
tam bajtów przed otrzymanym z malloc wskaźnikiem). Czy sam fakt, że
jest to możliwe dla jakiejś implementacji malloc powoduje, że dowolny
program (również taki nie korzystający z tej możliwości) używający tej
implementacji malloc nie ma wycieków?
Drugie pytanie: załóżmy, że zrobię sobie bibliotekę libmyalloc, która
udostępnia funkcje my_alloc() i my_free(). Ich specyfikacja jest taka
sama jak malloc i free, tylko że zawierają własną implementację
sterty, która - tak się składa - przechowuje w swoich strukturach
każdy blok zaalokowany przez malloc. Jeśli więc zechcę, mogę sobie
napisać w libmyalloc funkcję, która iteruje sobie po wszystkich
zaalokowanych blokach. Mógłbym też udostępnić klientowi funkcje
my_first_allocated_block() i my_next_allocated_block() pozwalające
klienckiemu kodowi przespacerować się po wszystkich zaalokowanych
blokach - ale chwolowo załóżmy, że tego ne robię.
Więc w kolejności: jeśli napiszę program korzystający z libmyalloc,
który w pewnym momencie wykonuje gdzieś my_alloc i nigdy dla tych
zaalokowanych bloków nie robi my_free, co z czasem prowadzi do
zapchania sterty zarządzanej przez libmyalloc, to jest wyciek, czy nie
ma wycieku?
A jeśli dodam _przy tym samym programie klienckim_ do biblioteki
libmyalloc funkcje my_first_allocated_block() i
my_next_allocated_block(), to coś się zmieni? Zauważ, że kod kliencki
oczywiście z tych funkcji nigdy nie korzysta, bo przeciez przed chwilą
ten sam kod linkował się z biblioteką bez tych funkcji. Są wycieki,
czy ich nie ma?
Następne wpisy z tego wątku
- 06.05.11 09:57 Andrzej Jarzabek
- 06.05.11 10:09 Andrzej Jarzabek
- 06.05.11 12:42 Michal Kleczek
- 06.05.11 13:35 kenobi
- 06.05.11 14:36 Andrzej Jarzabek
- 06.05.11 16:02 fir
- 06.05.11 18:40 kenobi
- 06.05.11 19:35 fir
- 06.05.11 19:45 fir
- 06.05.11 22:51 Michoo
- 07.05.11 05:40 kenobi
- 07.05.11 09:26 Jacek Czerwinski
- 07.05.11 09:44 Wojciech Muła
- 07.05.11 11:02 Michoo
- 07.05.11 11:08 Michoo
Najnowsze wątki z tej grupy
- Xiaomi [Chiny - przyp. JMJ] produkuje w całkowitych ciemnościach i bez ludzi
- Prezydent SZAP/USONA Trump ułaskawił prezydenta Hondurasu Hernandeza skazanego na 45 lat więzienia
- Rosjanie chwalą się prototypem komputera kwantowego. "Najważniejszy projekt naukowy Rosji"
- A Szwajcarzy kombinują tak: FinalSpark grows human neurons from stem cells and connects them to electrode arrays
- Re: Najgorszy język programowania
- NOWY: 2025-09-29 Alg., Strukt. Danych i Tech. Prog. - komentarz.pdf
- Na grupie comp.os.linux.advocacy CrudeSausage twierdzi, że Micro$lop używa SI do szyfrowania formatu dok. XML
- Błąd w Sofcie Powodem Wymiany 3 Duńskich Fregat Typu Iver Huitfeldt
- Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
Najnowsze wątki
- 2026-01-14 Do Kongresu SZAP/USONA Złożono Proj. ,,Ustawy o aneksji i statusie stanowym Grenlandii"
- 2026-01-13 STREFA CZYSTEGO TRANSPORTU. O tym nie mówią nam WŁADZE
- 2026-01-13 To nie koniec
- 2026-01-13 Warszawa => Recruiter 360 <=
- 2026-01-13 Katowice => Key Account Manager <=
- 2026-01-13 Warszawa => Senior Backend Java Developer <=
- 2026-01-13 Wrocław => ERP Implementation Consultant <=
- 2026-01-13 Elektryk a otwieranie drzwi :-)
- 2026-01-12 Schemat automatyki
- 2026-01-12 Xiaomi [Chiny - przyp. JMJ] produkuje w całkowitych ciemnościach i bez ludzi
- 2026-01-12 Polska Grupa Zbrojeniowa (85% udziałów) Likwiduje Stomil-Poznań - Zakład Działał Od 1928r.
- 2026-01-12 Teoretyczne zagadnienie - ogrzewanie budynku
- 2026-01-12 Xiaomi [Chiny - przyp. JMJ] produkuje w całkowitych ciemnościach i bez ludzi
- 2026-01-12 Xiaomi [Chiny - przyp. JMJ] produkuje w całkowitych ciemnościach i bez ludzi
- 2026-01-12 Polska Grupa Zbrojeniowa (85% udziałów) Likwiduje Stomil-Poznań - Zakład Działał Od 1928r.




5 Najlepszych Programów do Księgowości w Chmurze - Ranking i Porównanie [2025]