5corpio Napisano Styczeń 7, 2007 Zgłoś Share Napisano Styczeń 7, 2007 Witam mam taki dziwny problem otóż coś nie tak chyba robię przydzielając i zwalniając pamięc w programie jak używam do tego celu wskaźników. Mam taki przykład powiedzmy:[delphi][/delphi]Nie ma nic więcej w kodzie. I teraz pytanie bo sprawdzam pamięć przydzieloną do programu (w menadżerze zadań windows) przed wciśnięciem przycisku do alokowania pamięci i zajmuje powiedzmy 3mb po przydzieleniu z 5.5 a po "niby" zwolnieniu nadal zostaje to 5.5. Co jest nie tak ponieważ już próbowałem różnie. W helpie od Turbo Delphi każą dodać moduł ShareMem bodajże używając Dispose i New czy jakoś tak nawet korzystałem z metod z tego unitu i też nic.Edit: Jest też tak, że gdy zrobie dużo większą tablice i przydziele pamięć poprzez New to powiedzmy mam zajęte 23mb po "niby" zwolnieniu wraca mi do powiedzmy 9mb czyli nie do tego "początkowego" rozmiaru.Edit2: hehe Sazian racja jakoś mi to umknęło ;D Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
sazian Napisano Styczeń 8, 2007 Zgłoś Share Napisano Styczeń 8, 2007 5corpio jak by ci to powiedzieć.... Delphi prze tematem Link do komentarza Udostępnij na innych stronach More sharing options...
KaYou Napisano Styczeń 8, 2007 Zgłoś Share Napisano Styczeń 8, 2007 moze wyzeruj zmienna :i: przed wykonywaniem zwalniania, poniewaz zostaje jej chyba przydzielona ta ostatnia wartosc. "(2b || !(2b)) == question" W. Shakespeare http://jakubniwa.pl - świat sztucznej inteligencji Link do komentarza Udostępnij na innych stronach More sharing options...
Iskar Napisano Styczeń 8, 2007 Zgłoś Share Napisano Styczeń 8, 2007 [quote] moze wyzeruj zmienna :i: przed wykonywaniem zwalniania, poniewaz zostaje jej chyba przydzielona ta ostatnia wartosc. [/quote]Oj chyba coś Ci się pomyliło Link do komentarza Udostępnij na innych stronach More sharing options...
TSr Napisano Styczeń 8, 2007 Zgłoś Share Napisano Styczeń 8, 2007 Ten kod zdaje się być całkowicie w porządku. Skompilowałem to w Lazarusie (nie wiem czy to ma tutaj znaczenie) i wyniki były takie, że po zaalokowaniu tablicy pamięć programu rosła o 1.4 MB, a po zwolnieniu wracała do wartości poprzedniej. Powtórzyłem to z 10 razy i nie było żadnych ubytków Ubuntu.pl user #10593 Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Styczeń 8, 2007 Autor Zgłoś Share Napisano Styczeń 8, 2007 No właśnie mi też się wydaje, że powinien być w porządku jednak kompiluje to na TD i jest źle. Na ircu bodajże Blind (to ty byłeś?) sprawdzał taki kod na delphi 7 i też miał te same problemy więc w czym rzecz ? Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
KaYou Napisano Styczeń 8, 2007 Zgłoś Share Napisano Styczeń 8, 2007 [quote] Oj chyba coś Ci się pomyliło [/quote] sorki ale jakas taka bombe mialem..xDU mnie tez wpozadku po skompilowaniu....... "(2b || !(2b)) == question" W. Shakespeare http://jakubniwa.pl - świat sztucznej inteligencji Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Styczeń 8, 2007 Zgłoś Share Napisano Styczeń 8, 2007 Ten problem jest nie tylko w Delphi, sprawdzalem to w cep builderze i strata pamieci byla jeszcze wieksza . www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Styczeń 8, 2007 Autor Zgłoś Share Napisano Styczeń 8, 2007 To może teraz podejdźmy do tego nie od strony IDE czy to delphi czy Lazarus czy builder tylko może to gdzieś w Windowsie pies pogrzebany ? Bo niektórym działa a innym nie ? Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Iskar Napisano Styczeń 8, 2007 Zgłoś Share Napisano Styczeń 8, 2007 Z Blindem i Tosterem to wczoraj badaliśmy, u każdego z nas był ten problem - ja mam winde XP prof. Nie wiem o co z tym loto i mam nadzieje że ktoś zagadkę rozwiąże Link do komentarza Udostępnij na innych stronach More sharing options...
filuu Napisano Styczeń 8, 2007 Zgłoś Share Napisano Styczeń 8, 2007 u mnie działa ..Po uruchomieniu jest 2700 ~ przydzieleniu 4300~ a po zwolnieniu 3400~ pozniej za kazdym zwolnieniem zwalnie prawidłowo do 3400~ . Mam windows Xp Pro z SP2 . chociaz watpie czy service pack ma cos do tego .. Lubię cytryny ! Link do komentarza Udostępnij na innych stronach More sharing options...
KaYou Napisano Styczeń 8, 2007 Zgłoś Share Napisano Styczeń 8, 2007 Dziwne jest ze jezeli uzyje jakiegos programu do czyszczenia ramu uzyta pammiec dochodzi do normalnego poziomu nie zostaje te w moim przypadku 400 KB, mi sie wydaje ze to pozostaja jakies wskazniki. Sprawdzcie "(2b || !(2b)) == question" W. Shakespeare http://jakubniwa.pl - świat sztucznej inteligencji Link do komentarza Udostępnij na innych stronach More sharing options...
oksal Napisano Styczeń 8, 2007 Zgłoś Share Napisano Styczeń 8, 2007 Tez trochę poeksperymentowałem... Dodatkowo "kazałem" pamiętac kazdemu elementowi "cos" adres na samego siebie. Uzyłem dwoch konstrukcji , jedna to podana przez 5corpio a druga to "pamiętanie" lementu "cos" w liscie a nie w tablicyWynik są różne. Mniejszy ubytek (raptem 4KB) występują przy uzyciu list. Ponizej kod mojego testowania [code=Delphi] type PCos=^Cos; Cos=pString; TForm1 = class(TForm) ]N]]]YH]6Ć66VćFW#D&ŚV7B&6VGW&R'WGF$6Ć66VćFW#Q=(Ń(AŃąŃ(ą( { Public declarations } end; var Form1: TForm1; L:TL^VKLH[[[Y[][b33c\"ćFf&6VGW&RDf&Ó'WGF6Ć66VćFW#D&ŚV)Ń)(Ńźź(( New(cos[i]); cos[i]:=Addr(cos[i]^); end; end; proceHLK]XĘ[X NH[YVvf\"ŁÓFFF76R65śŚVćCQ ŃŃ ąŹĄMQ=)( A i:integer; begin L:=TList.Create; for i:=1 to 10000 do Y[]ĘPĘNPPYPNY PĘN[VćC&6VGW&RDf&Ó'WGF$6Ć66VćFW#D&ŚV7Bf\"Ń)(Ńź0 ź(ĄA Ą.Items[i])); L.Free; end; end. [/code] pozdrawiam oksal Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Styczeń 8, 2007 Autor Zgłoś Share Napisano Styczeń 8, 2007 No ale dochodzimy do wniosku, że coś jest nie tak. I wartało by gdzieś zasięgnąć dalej z tym problemem. Mam XP media center 2k5 z SP2 ale to też pewnie dużo nie zmienia. Myślicie, że wsparcie jakieś techniczne ze strony microsoftu mogło by pomóc ew. coś powiedzieć ? [quote] Dziwne jest ze jezeli uzyje jakiegos programu do czyszczenia ramu uzyta pammiec dochodzi do normalnego poziomu [/quote] Czyli, że niby magiczny XP, który miał być lepszy nadal do dupy zwalnia pamięć czy cuś w tym stylu ? Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Styczeń 8, 2007 Zgłoś Share Napisano Styczeń 8, 2007 hehehe... wystarczy ze ktos wymysli jakis prosty maly kodzik i juz pelno ludzi ma z tego frajde powniennem byc slawny Gdy uzylem array of integer to strata pamieci byla niewielka, cos kolo 40KB.a ja mam Win XP Home edition z SP2 www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Styczeń 8, 2007 Autor Zgłoś Share Napisano Styczeń 8, 2007 [quote] hehehe... wystarczy ze ktos wymysli jakis prosty maly kodzik i juz pelno ludzi ma z tego frajde powniennem byc slawyny [/quote]Kod twój ale problem mój był Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Styczeń 8, 2007 Zgłoś Share Napisano Styczeń 8, 2007 hehehe.. no nie zupelnie, bo ty nie wiedziales co sie dzieje i myslales ze cos zle robisz ze nie dziala. a tu niespodzianka i nie twoja wina Dobra, to razem powinnismy byc slawni www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
5corpio Napisano Styczeń 8, 2007 Autor Zgłoś Share Napisano Styczeń 8, 2007 Zrobiłem to na tablicy wskaźników do Int i coś tam mając 23mb zajęte zwalnia potem do 9mb. Tylko teraz pytanie czemu raz to się dzieje a raz nie ? Ot taka mini-strona moja po godzinach http://www.wnetrzekuchni.pl Link do komentarza Udostępnij na innych stronach More sharing options...
TSr Napisano Styczeń 8, 2007 Zgłoś Share Napisano Styczeń 8, 2007 [quote name='oksal' post='7049' date='pon, 08 sty 2007 - 21:04'] [code=Delphi] ACos:=Addr(ACos^); +hs6Źjhvz33zZaPWHHPWN [/code]UPDATEOskal: Do listy wpisujesz 10 000 elementów zamiast 100 000, może to ma jakiś wpływ na tę różnicę...Nie czepiam się, że ten zapis jest tylko w inny sposób przedstawiony, ale o to, że to jest samo w sobie bez sensu Ubuntu.pl user #10593 Link do komentarza Udostępnij na innych stronach More sharing options...
oksal Napisano Styczeń 8, 2007 Zgłoś Share Napisano Styczeń 8, 2007 [quote] Czy to czasami nie jest jednoznaczne z: [code=Delphi] ACos[i] := ACos[i]; [/code] [/quote] jest jednoznaczne. Tak jak lecial na unice "konkurs" sto iles tam sposobow wyrzucenia napisu, ale nie oto mi chodziło czy mozna tak przypisac czy tez inaczej. Chce pokazac ze uzycie TList daje mniejsze straty .. ktore pomimo tego jednak sąPSNie ma sensu rozdrabniac głownego tematu pozdrawiam oksal Link do komentarza Udostępnij na innych stronach More sharing options...
oksal Napisano Styczeń 8, 2007 Zgłoś Share Napisano Styczeń 8, 2007 [quote] Oskal: Do listy wpisujesz 10 000 elementów zamiast 100 000, może to ma jakiś wpływ na tę różnicę...Nie czepiam się, że ten zapis jest tylko w inny sposób przedstawiony, ale o to, że to jest samo w sobie bez sensu [/quote]Bez sensu czy nie? a co miałem tam przypisac? jezeli nie chcialem aby lądowały tam smieci z pamieci kompa? Ziwększylem z tych 10 000 na 100 000 jednoczesnie zmieniajac i:integer na i:longInt. Wynik jaki uzyskałem, to nadal zgubione tylko 4 kB uruchomienie praogramu : 2408utworzenie 100 000 elementów w liscie : 3976zwolnienie elementow : 2412I nie mialo znaczenia czy cos do zmiennej "cos" przypisywałem. Wniosek przechowywanie wskaznikow w TList lepiej zwalnia pamięć. Problem nadal jest. Do czego jest wykorzystane te 4 kB?PSW kazdym badz razie nie przeszkadza to w spozywaniu piwa:) pozdrawiam oksal Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Styczeń 9, 2007 Zgłoś Share Napisano Styczeń 9, 2007 Wina musi stać raczej po stronie systemu operacyjnego, probowalem w roznych jezykach i roznych kompilatorach i na roznych kompach jedynie co bylo wspolne to Win XP efekt ten sam... www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
Wosiedem Napisano Styczeń 10, 2007 Zgłoś Share Napisano Styczeń 10, 2007 To ja też się wypowiem. Do kodu 5corpio dodałem takie coś. [code=Delphi] :k}śzk^$YgjJ0[hZśóZ$k;Łzv~;-źŚ Ś(vśóY,z73& Z-źjj$)'Śźr+$0ĄŁyvz+k:0Ł:k Zvyz7Ź<xĘz,iz<\"z=!Łns6ŹjhŃąC3j7\"zĘmhśŚóK\"s-źK3ŚQ ŃŃ ąŹĄMQ=)(źź sie nie dzieje end; [/code]Kliknięci w taki przycisk powoduje u mnie zwiększenie programu o 32kb Może ta różnica po zwolnieniu wynika z faktu obsługi kliknięcia bądź czegoś innego (np. wywołań funkcji systemowych itp itd)System: win xp home sp2Środowisko: D2005 Pozdrawiam, vo7 (; Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Styczeń 10, 2007 Zgłoś Share Napisano Styczeń 10, 2007 nie... robilem tez konsolowa aplikacje (VC++) i strata pamieci tez byla... www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
Iskar Napisano Styczeń 16, 2007 Zgłoś Share Napisano Styczeń 16, 2007 Ok miśki, dostałem odpowiedź od działu technicznego Borlanda: [quote] Takie zachowanie to typowe działanie Memory Managera. Nie zwalnia on systemowi całej pamięci, którą wcześniej zarezerwował, aby w przyszłości nie rezerwować jej ponownie tylko wykorzystać nie zwolniona, ale nie wykorzystaną pamięć. Szczególnie w Turbo Delphi powinno to być widoczne, gdzie działa nowoczesny i bardzo zoptymalizowany menedżer pamięci FastMM. Proszę się nie przejmować takimi wynikami (...) nie jest to żaden bład.Jako ciekawostkę proponuje zapoznać się z artykułem na temat optymalizacji w nowym menedżerze pamięci:http://dn.codegear.com/article/33416 [/quote] Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.