-
41. Data: 2011-05-05 23:29:22
Temat: Re: typologia errorow aplikacji (a jeszcze leipaj i realoki)
Od: Andrzej Jarzabek <a...@g...com>
On 04/05/2011 19:49, p...@p...onet.pl wrote:
>> tamto mowienie o 'wyciekach' na statycznej tablicy mz
>> mozna porownac do sytuacji gdy nie zwalnia sie juz nie uzywanych
>> elementow stlowego wektora - to nie sa defakto wycieki tylko zapchanie
>> sobie kontenera
>
> te dwie rzeczy tj 'niepoodznaczanie rekordow w tablicy' i
> 'leaki w systemach z new' sa jakosciowo tak roznymi rzeczami
> i roznia sie tak jak Francuz od Czeczena albo Gruszka od Marsa,
>
> tak ze ten kto chce tu widziec to samo albo nawet podobne rzeczy
> robi sobie sadlo z mozgu - nie chce mi sie wymieniac wszystkich
> ych roznic ale chocby wspomiane ze druga z tych reczy to leaki
> a pierwsza nie, albo np to ze w systemach z 'new' wyciec moze
> wszystko, wyciec moze 127 albo ktoras z instancji 16 milionow
> 777 typow
Ale co to zmienia? Typ jest tutaj jedynie jakąś konstrukcją na poziomie
języka, w statycznej tablicy możesz mieć jeden 'typ' w sensie typu C,
ale ten typ może wyglądać np. tak
struct Samolot
{
unsigned typ_samolotu;
float wysokość;
...
};
Wtedy też może wyciec któraś z instancji 16 milionów 777 typów
reprezentowanych 16 milionów 777 możliwymi wartościami pola typ_samolotu.
> - gdy w c ze statycznymi tablicami nawet jak ktos zapchalby
> tablice (a jest to naprawde wyjakowo GRUBY blad i zeby go ZROBIC
> trzeba sie starac tak samo mocno jak o to by nie zrobic jakiegos
> leaka bo o to jest dla odmiany nietrudno)
W zależności jakie masz algorytmy i struktury może być dokładnie tak
samo łatwo. W ogólnym przypadku będzie to przecież wyglądać tak, że dla
jakiejś funkcji np.
int alokuj_samolot()
będziesz musiał zawołać
void zwolnij_samolot(int idx);
jeśli nie zawołasz, to masz "martwy" element w tablicy, którego już nie
używasz, a który nigdy nie będzie mógł być wykorzystany ponownie na
zaalokowanie innego samolotu. W czym niby nie wywołanie free dla malloc
jest łatwiejsze niż nie wywołanie zwolnij_samolot dla alokuj_samolot?
> to przy probie wstawienia
> czegos do tej konkretnej tablicy z konkretnymi instancjami konkretnego
> typu komunikat wypisze jawnie "brak miejsca w tablicy samolotow"
No a malloc jak zajmiesz całą dostępną pamięć zwróci null, co możesz
sobie też przecież zamanifestować wypisaniem komunikatu.
> pozatym te instancje ktore nie sa wylaczone/odznaczone sa po prostu
> uzywane i to widac
Do czego są używane? I gdzie to widać?
-
42. Data: 2011-05-05 23:29:52
Temat: Re: typologia errorow aplikacji (a jeszcze leipaj i realoki)
Od: Michoo <m...@v...pl>
W dniu 05.05.2011 00:32, fir pisze:
>> tworzenia stu instancji ktore pozniej moga spokojnie hulac
>
> wogole to nie chcialem sie wdawac w takie dlugie wyjasnienia, chcialem
> tylko owiedziec (a nawet wcale nie chcialem tego pwiedzec) tylko zauwazyc
> ze tak jest:
>
> w statycznym c NAPRAWDE nie ma takiego pojecia i problemu
> jak leaki (jest to pojecie absolutnie nieznane)
Pokazałem Ci leak w statycznym kodzie. i to bardzo prostym.
Mam cały czas wrażenie, że podchodzisz do programowania z punktu
widzenia programów "Ahoj przygodo!!!" w którym żeby mieć
błąd/leak/nieoczekiwane zachowanie trzeba się naprawdę postarać. Gdy
tymczasem programowanie to dużo, dużo więcej a wykrycie błędów w
"statycznym C fira" jest wyjątkowo trudne.
> jak ktos nie wierzy to mz jego problem
Tak, bo Twoja racja jest najtwojsza...
--
Pozdrawiam
Michoo
-
43. Data: 2011-05-05 23:39:42
Temat: Re: typologia errorow aplikacji (a jeszcze leipaj i realoki)
Od: Michoo <m...@v...pl>
W dniu 05.05.2011 00:20, p...@p...onet.pl pisze:
> staje sie niedostepna przez wskazniki ;-) tylko ze ja wskaznikow nie
> uzywam ja operuje na calych 'setach'
>
> // porusz wszystkie 'zywe'
>
> for(int i=0; i<MAX; i++)
> if(samolot[i].enabled) moveSamolot(i);
To teraz napisz tak serwer, który ma obsłużyć do 10 milionów samolotów,
statków, samochodów i pociągów. Pojedynczy samolot(100B), statek(40B),
pociąg(64B), samochód(95B) z czego 50 pierwszych bajtów ma taką samą
interpretację we wszystkich, pozostałe są specyficzne.
Zadeklarujesz tablice
Samolot samolot[100000000];
Statek statek[100000000];
...
?
--
Pozdrawiam
Michoo
-
44. Data: 2011-05-06 00:44:32
Temat: Re: typologia errorow aplikacji (a jeszcze leipaj i realoki)
Od: Andrzej Jarzabek <a...@g...com>
On 06/05/2011 00:39, Michoo wrote:
> W dniu 05.05.2011 00:20, p...@p...onet.pl pisze:
>> staje sie niedostepna przez wskazniki ;-) tylko ze ja wskaznikow nie
>> uzywam ja operuje na calych 'setach'
>>
>> // porusz wszystkie 'zywe'
>>
>> for(int i=0; i<MAX; i++)
>> if(samolot[i].enabled) moveSamolot(i);
> To teraz napisz tak serwer, który ma obsłużyć do 10 milionów samolotów,
> statków, samochodów i pociągów. Pojedynczy samolot(100B), statek(40B),
> pociąg(64B), samochód(95B) z czego 50 pierwszych bajtów ma taką samą
> interpretację we wszystkich, pozostałe są specyficzne.
>
> Zadeklarujesz tablice
> Samolot samolot[100000000];
> Statek statek[100000000];
> ...
> ?
Nawet nie trzeba aż tak. Załóżmy nawet, że są tylko samoloty. Może być
do 10 milionów samolotów, ale na raz na radarze masz zwykle np. 30.
Profesor sobie wyobraża, że iterowanie po samolotach widocznych na
radarze wygląda tak:
for(int i=0; i<10000000; i++)
if(samolot[i].na_radarze)
{
....
}
-
45. Data: 2011-05-06 00:53:28
Temat: Re: typologia errorow aplikacji (a jeszcze leipaj i realoki)
Od: Michoo <m...@v...pl>
W dniu 06.05.2011 02:44, Andrzej Jarzabek pisze:
> Nawet nie trzeba aż tak. Załóżmy nawet, że są tylko samoloty. Może być
> do 10 milionów samolotów, ale na raz na radarze masz zwykle np. 30.
> Profesor sobie wyobraża, że iterowanie po samolotach widocznych na
> radarze wygląda tak:
>
> for(int i=0; i<10000000; i++)
> if(samolot[i].na_radarze)
> {
> ....
> }
Jak go znam to ma tablicę
int ra_nadarze[30] i po niej iteruje.
(no i pewnie segv gdyby się jednak 31 pojawiło ;) )
--
Pozdrawiam
Michoo
-
46. Data: 2011-05-06 04:31:50
Temat: Re: typologia errorow aplikacji (a jeszcze leipaj i realoki)
Od: "Wojciech \"Spook\" Sura" <wojciech.sura_no@spam_poczta.medi.com.pl>
Dnia 06-05-2011 o 01:29:52 Michoo <m...@v...pl> napisał(a):
> W dniu 05.05.2011 00:32, fir pisze:
>>> tworzenia stu instancji ktore pozniej moga spokojnie hulac
>>
>> wogole to nie chcialem sie wdawac w takie dlugie wyjasnienia, chcialem
>> tylko owiedziec (a nawet wcale nie chcialem tego pwiedzec) tylko
>> zauwazyc
>> ze tak jest:
>>
>> w statycznym c NAPRAWDE nie ma takiego pojecia i problemu
>> jak leaki (jest to pojecie absolutnie nieznane)
> Pokazałem Ci leak w statycznym kodzie. i to bardzo prostym.
>
> Mam cały czas wrażenie, że podchodzisz do programowania z punktu
> widzenia programów "Ahoj przygodo!!!" w którym żeby mieć
> błąd/leak/nieoczekiwane zachowanie trzeba się naprawdę postarać. Gdy
> tymczasem programowanie to dużo, dużo więcej a wykrycie błędów w
> "statycznym C fira" jest wyjątkowo trudne.
>
>> jak ktos nie wierzy to mz jego problem
> Tak, bo Twoja racja jest najtwojsza...
Prawdę mówiąc, w tym przypadku zgadzam się z autorem pierwszego posta.
Twój przykład nie ma wycieku pamięci jako takiego, tylko nieumiejętne
zarządzanie tablicą. Jeśli mam tablicę od 0 do 9 i ustalę, że pierwszym
elementem jest 5, to mimo tego w każdym miejscu programu nadal jestem w
stanie dostać się do pierwszych czterech elementów. Jeśli napiszę zaś
funkcję, która zaalokuje pamięć i jej nie zwolni (oraz nigdzie nie
pozostawi do niej wskaźnika), to w praktyce *nie* jestem w stanie do tej
pamięci już się dostać. To jest bardzo istotna różnica, która - moim
zdaniem - nie pozwala nazwać pierwszego przypadku wyciekiem pamięci.
Fir mówi o wyciekach pamięci na poziomie zarządzania pamięcią operacyjną,
Ty mówisz o "wyciekach" na poziomie logiki programu.
Inaczej: napisz mi taki program (w C++), który używa tylko obiektów
alokowanych statycznie i zgłosi wyciek pamięci:
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
int main (int argc, char * argv[])
{
// Tu Twój kod
_CrtDumpMemoryLeaks();
}
Pozdrawiam -- Spook.
--
Używam klienta poczty Opera Mail: http://www.opera.com/mail/
-
47. Data: 2011-05-06 04:39:49
Temat: Re: typologia errorow aplikacji (a jeszcze leipaj i realoki)
Od: "Wojciech \"Spook\" Sura" <wojciech.sura_no@spam_poczta.medi.com.pl>
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. Ba, można banalnie łatwo napisać odśmiecacz,
który z powrotem odzyska nieużywane rekordy. Natomiast nie ma już szansy
odzyskać utraconego wskaźnika do dynamicznie zaalokowanej pamięci.
Błąd architektury, logiki programu - jak najbardziej tak. Wyciek? Nie.
>> (z tego jak to widze leaki raczej nieodzownie lacza
>> sie z utraconymi referencjami czyli nieodzownie zagubionym ramem)
>
> To jest tylko kwestia implementacyjna. Logicznie masz ten sam problem:
> jeśli element w tablicy nie może być już do niczego użyty (nie ma i
> logicznie nie mogą pojawić się indeksy tego elementu), a nie został
> oznaczony jako wolny czy wpisany do puli wolnych elementów, to RAM
> zajmowany przez ten element jest "nieodzownie zagubiony".
Tylko że Firowi _cały czas chodzi o fizyczne wycieki_, a nie o logiczne,
związane z konstrukcją programu. Tobie zaś chodzi o logiczne (w których
zawierają się fizyczne) i dlatego obaj kłócicie się bezproduktywnie.
Pozdrawiam -- Spook.
--
Używam klienta poczty Opera Mail: http://www.opera.com/mail/
-
48. Data: 2011-05-06 04:45:19
Temat: Re: typologia errorow aplikacji
Od: "Wojciech \"Spook\" Sura" <wojciech.sura_no@spam_poczta.medi.com.pl>
Dnia 02-05-2011 o 11:54:39 fir <f...@g...pl> napisał(a):
> - leaki (wycieki)
> - zwis (hang)
> - crash to desktop
> - crash systemu
(...)
> na pewno mozna cos dorzucic, poszerzyc i pouszczegolawiac ta liste;
> czy moze ktos cos dorzucic i powiedziec pare slow o poszczegolnych
> przypadkach, ZACHECAM
To są efekty błędów w programie, a nie błędy jako takie. Bez określenia
zakresu efektów błędu możemy przygotować listę zaczynającą się od
zapalenia nieprawidłowej diody na klawiaturze poprzez opisane przez
Ciebie, aż do błędu w programie naprowadzania międzykontynentalnego
pocisku balistycznego kończącym się wyparowaniem jakiegoś średniej
wielkości miasta wraz z mieszkańcami.
Pozdrawiam -- Spook.
--
Używam klienta poczty Opera Mail: http://www.opera.com/mail/
-
49. Data: 2011-05-06 06:41:59
Temat: Re: typologia errorow aplikacji (a jeszcze leipaj i realoki)
Od: " " <f...@W...gazeta.pl>
Michoo <m...@v...pl> napisał(a):
> W dniu 05.05.2011 00:20, p...@p...onet.pl pisze:
> > staje sie niedostepna przez wskazniki ;-) tylko ze ja wskaznikow nie
> > uzywam ja operuje na calych 'setach'
> >
> > // porusz wszystkie 'zywe'
> >
> > for(int i=0; i<MAX; i++)
> > if(samolot[i].enabled) moveSamolot(i);
> To teraz napisz tak serwer, który ma obsłużyć do 10 milionów samolotów,
> statków, samochodów i pociągów. Pojedynczy samolot(100B), statek(40B),
> pociąg(64B), samochód(95B) z czego 50 pierwszych bajtów ma taką samą
> interpretację we wszystkich, pozostałe są specyficzne.
>
> Zadeklarujesz tablice
> Samolot samolot[100000000];
> Statek statek[100000000];
> ....
> ?
>
nigdy nie rozwazalem pisania serwera i nie mam pojecia jakie funkcje
mialby spelniac taki kod serwera, byc moze potrzebne by byly jakies
'poindeksowane' struktury danych - nie mam pojecia o serwerach i zajmuje
sie teraz innymi rzeczami (ktore mam niestety na glowie), tak ze jak
chcesz pogadac o serwerach to raczej zadaj to pytanie w trybie ogolnym
na grupie niech odpowiedza ci ci ktorzy sa tym zainteresowani
moglbym krotko odpowiedziec jak robilbym o w gierce roguelike:
"najwydajniej jest raczej w oddzielnych tablicach"
ale trzebabyraczej zmniejszyc liczby na bardziej realistyczne, bo
wymodelowania takich liczb postaci - 40 milionow i np adekwatnej
( w pewnym pseudo relistycznym sensie bo zwykle mapy sa bardziej
chyba zageszczone - choc z kreowanymi swiatami to roznie moze byc)
do tego mapy np mapy polski (zaraz ile to by bylo pol na mapie polski?
600 000 x 600 000 = 312 685 000 000 pol, czyli 312 giga)
raczej nie uciagnalby obecny sprze - nie sprawdzalem nawet
ile postaci i jakie mapy by uciagnal (ostatnio bylem
limitowany do kilkudziesieciu tysiecy i map typu 2000x2000)
- ale da sie zrobic zlozona gierke na duzej mapie - nawet mam
lekka ochote ale to kwestia pisania przez pare lat a niestety mam
teraz inne rzeczy do zrobienia (i tak juz sie postarzalem, wylysialem
na zakolach brzuch mi urosl, plomby mi sie w zebach ruszaja,
skostnialem jak drewniany czlowiek, (a i znane sa
i inne ciezkie zyciowe kwestie) - tak ze chwilowo roguelike
odpada)
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
50. Data: 2011-05-06 07:11:41
Temat: Re: typologia errorow aplikacji (a jeszcze leipaj i realoki)
Od: "kenobi" <p...@p...onet.pl>
> Nawet nie trzeba aż tak. Załóżmy nawet, że są tylko samoloty. Może być
> do 10 milionów samolotów, ale na raz na radarze masz zwykle np. 30.
> Profesor sobie wyobraża, że iterowanie po samolotach widocznych na
> radarze wygląda tak:
>
> for(int i=0; i<10000000; i++)
> if(samolot[i].na_radarze)
> {
> ....
> }
general sobie nic takiego nie wyobraza, to kwestia skali
zapodalem kiedys posta konkurs na najlepszy kod do
detekcji kolizji w postaci funkcji
int_pair* collision = dish_up_collisions(Spheric_entity* object );
[caigle ten sam problem ze lepiej by bylo jak dac collisions zamiast
collision tylko ze wtsdy collisions[2] nie pasuje]
ale jakos nikt sie nie popisal
moze wiec odpowiesz jak to powyzej z radarem nalezy_ zrobic
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl