Climatechange is a super-wicked problem, but:
"The stone age came to an end not for lack of stones. And the oil age will come to an end not for lack of oil." -- Sheikh Yamani, Saudi oil minister
8xLG Neon MonoX 290Wp SMA SB2100TL / MY SR '22
We adore chaos because we like to restore order - M.C. Escher
Climatechange is a super-wicked problem, but:
"The stone age came to an end not for lack of stones. And the oil age will come to an end not for lack of oil." -- Sheikh Yamani, Saudi oil minister
8xLG Neon MonoX 290Wp SMA SB2100TL / MY SR '22
Verwijderd
Verwijderd
Niet dat je hier heel veel aan hebt voor het opsporen van je lek, trouwens.
Ga ik maar es ff doen, bedankt.Verwijderd schreef op 02 september 2002 @ 14:08:
Toch een memleakje tip download een trial versie van purify wedde dat je 'm in notime genailed hebt dan
Als ik lang genoeg wacht, en het programma heeft al rond de 40 meg gealloceerd dan wordt dit ook allemaal vrijgegeven.Ik heb zelf ook al eens geconstateerd dat als je minimaliseert, er circa 1.5MB wordt vrijgegeven. Maar dat gebeurt ook bij programma's die absoluut NIET lekken.
Klopt dat heb ik hier ook, maar wel komt er elke seconde zo rond de 4k bij, maar dat kan, zoals YarVieh het opmerkt, misschien met Rational Purify opgelost worden.Als je daarna weer maximaliseert, komt die 1.5MB er overigens NIET meteen weer bij.
Climatechange is a super-wicked problem, but:
"The stone age came to an end not for lack of stones. And the oil age will come to an end not for lack of oil." -- Sheikh Yamani, Saudi oil minister
8xLG Neon MonoX 290Wp SMA SB2100TL / MY SR '22
Verwijderd
Verwijderd
Minimalizeren is niets anders dan een je window verbergen. Oftewel paint acties op de DC van je window worden niet op het scherm getoont. Dat heeft toch niets met geheugen te maken (niet direct althans). Dus of jouw programma of windows is HEEL ERG brak.
Is het niet mogelijk om een wrapper functie om de alloc/free functies te bouwen, waarin je alles logt. (alloc = ++, free = --) Zo weet je exact hoeveel jouw programma verbruikt.
Het probleem hierbij is dat het heel leukt werkt als je overal consequent alloc/free gebruikt en het wat lastiger word met new delete. (don't use object oriëntated languages anyway).
Verwijderd
Ehh schijnbaar past de NT kernel als je je app minimized de working set size aan, zie Inside windows 2000 voor een uitgebreide beschrijving over de werking van de Virtual Memory Manager gezien dit imho te complex is om in 'n topicje op got uit te leggen.Er is hier toch iets wat mij volledig ontgaat ...Minimalizeren is niets anders dan een je window verbergen.
Verwijderd schreef op 02 september 2002 @ 20:05:
Het probleem hierbij is dat het heel leukt werkt als je overal consequent alloc/free gebruikt en het wat lastiger word met new delete. (don't use object oriëntated languages anyway).
new en delete kun je ook gewoon overloaden
en waarom zou je geen OO moeten gebruiken? Kun je dat eens onderbouwen?
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Verwijderd
Verwijderd schreef op 02 september 2002 @ 20:05:
Er is hier toch iets wat mij volledig ontgaat ...
Minimalizeren is niets anders dan een je window verbergen. Oftewel paint acties op de DC van je window worden niet op het scherm getoont. Dat heeft toch niets met geheugen te maken (niet direct althans). Dus of jouw programma of windows is HEEL ERG brak.
Is het niet mogelijk om een wrapper functie om de alloc/free functies te bouwen, waarin je alles logt. (alloc = ++, free = --) Zo weet je exact hoeveel jouw programma verbruikt.
Het probleem hierbij is dat het heel leukt werkt als je overal consequent alloc/free gebruikt en het wat lastiger word met new delete. (don't use object oriëntated languages anyway).
Bedoelde je niet "I don't use object oriented languages anyway" ?
[ Voor 0% gewijzigd door MSalters op 04-09-2002 14:56 . Reden: Smiley doet't niet voor "Jammer" ]
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein
Toch raar trouwen dat functies als CrtMemDifference dit soort problemen blijkbaar niet op kunnen sporen. Rational Purify was in dit geval de oplossing: het geeft zelfs de regel aan waarop het geheugenlek optreedt, echt ideaal.
Ik ben nog niet zo lang geleden van C naar C++ overgestapt en ik zie een heleboel mogelijkheden om de code gestructureerder in te kloppen, ik snap dan ook niet wat Unteraarsch hier tegen heeft. BTW ik wil hierover geen discussie starten
Climatechange is a super-wicked problem, but:
"The stone age came to an end not for lack of stones. And the oil age will come to an end not for lack of oil." -- Sheikh Yamani, Saudi oil minister
8xLG Neon MonoX 290Wp SMA SB2100TL / MY SR '22
Tuurlijk is dat mogelijk, heel gangbaar zelfs... en je hebt ook nog IMallocSpy als je via Win32/COM werktVerwijderd schreef op 02 september 2002 @ 20:05:
Is het niet mogelijk om een wrapper functie om de alloc/free functies te bouwen, waarin je alles logt. (alloc = ++, free = --) Zo weet je exact hoeveel jouw programma verbruikt.
Ach...Het probleem hierbij is dat het heel leukt werkt als je overal consequent alloc/free gebruikt en het wat lastiger word met new delete.
1
2
3
4
| inline void* operator new(size_t p_Size) { return MyAllocRoutine(p_Size); }
inline void* operator new [] (size_t p_Size) { return MyAllocRoutine(p_Size); }
inline void operator delete(void* p_Block) { MyReleaseRoutine(p_Block); }
inline void operator delete [] (void* p_Block) { MyReleaseRoutine(p_Block); } |
maar aan de andere kant: een andere namespace is meestal een bepaalde library oid... en daarvan mag je wel verwachten dat de boel niet lekt
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Verwijderd
De enige onderbouwing die ik heb is de volgende:.oisyn schreef op 02 september 2002 @ 21:47:
new en delete kun je ook gewoon overloaden
en waarom zou je geen OO moeten gebruiken? Kun je dat eens onderbouwen?
Ik ben ooit een projectje begonnen in c++, was aardig aan het lukken. Maar ik was heel erg aan het kutten met de stijl. Toen ben ik (vraag niet waarom) de source gaan herschrijven zonder classes/methodes, maar met structs/functions. De source werd echt twee keer zo klein en deed precies hetzelfde.
Geen gekut met set_value/get_value functies maar gewoon de struct member een waarde geven. Klaar.
Ik heb niets tegen het idee van objecten, maar ik kan niet tegen code die niets uitvoerd maar alleen conventie is. Gewoon niet mijn stijl.
Volgens mij optimaliseerd de compiler tegenwoordig zover dat je bijna een struct achtig iets overhoudt, dus voor de snelheid hoef je het ook niet echt te doen.
Waneer je puur en alleen wat simpele data op wilt slaan en beschikbaar wilt hebben kan je natuurlijk zo'n eigen struct en functies methode gebruken. Mijn ervaring leert mij dat dat soort dingen meestal uitgroeien, en dan wordt het alsnog omschrijven
The box said 'requires Windows 95 or better', so I installed Linux...
dat jij niet snapt waarvoor data hiding en encapsulation is, is nog geen reden om andere mensen af te raden OO te coden... vind het een beetje loos argument eigenlijk
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Soms wil je wel nog steeds basic structs gebruiken (ofwel POD types, plain old data types) Dit vanwege de standaard garantie dat POD types gekopieerd kunnen worden via een memcopy ter grote van sizeof(POD). Dat is wel handig als je bv packets naar een netwerk kaart memory mapped IO wilt dumpen.TheMrH schreef op 04 september 2002 @ 22:06:
Waneer je puur en alleen wat simpele data op wilt slaan en beschikbaar wilt hebben kan je natuurlijk zo'n eigen struct en functies methode gebruken. Mijn ervaring leert mij dat dat soort dingen meestal uitgroeien, en dan wordt het alsnog omschrijven
Verwijderd
.oisyn, jij bent toch moderator?? dan moet je dit topic toch dichtgooien omdat het nogal off-topic gaat en mensen teveel met hun mening gaan rondbazuinen?.oisyn schreef op 04 september 2002 @ 22:16:
unteraarsch: is dat je reden? pffff...
dat jij niet snapt waarvoor data hiding en encapsulation is, is nog geen reden om andere mensen af te raden OO te coden... vind het een beetje loos argument eigenlijk
edit: Ik hoop dat je snapt dat ik niet bedoelde dat mensen niet OO moeten gaan proggen (heb ik ook een lange periode gedaan), maar dat ik er het voordeel niet zo van in zie.
er is niets mis met offtopic gedrag (zolang het nog maar met P&W te maken heeft), en als je hier je mening niet mag geven dan ontgaat het nut van een forum me even...Verwijderd schreef op 05 september 2002 @ 00:35:
[...]
.oisyn, jij bent toch moderator?? dan moet je dit topic toch dichtgooien omdat het nogal off-topic gaat en mensen teveel met hun mening gaan rondbazuinen?
edit: Ik hoop dat je snapt dat ik niet bedoelde dat mensen niet OO moeten gaan proggen (heb ik ook een lange periode gedaan), maar dat ik er het voordeel niet zo van in zie.
ah ok, zo kwam het wel over... misverstand dus
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Sowieso doe je het meestal zo:.oisyn schreef op 04 september 2002 @ 20:52:
het is alleen wat vervelend dat die operatoren alleen in de huidige namespace werken (en natuurlijk in namespaces die de operatoren uit de huidige namespace gebruiken)
maar aan de andere kant: een andere namespace is meestal een bepaalde library oid... en daarvan mag je wel verwachten dat de boel niet lekt
1
2
3
4
5
6
7
8
| class MyBaseObject { public: // Methods ... void* operator new(size_t p_Size); void operator delete(void* p_Block); }; |
Zodat je niet iedere boerenlul met jouw alloc routines opscheept maar alleen objecten uit je eigen classtree.
curry684 schreef op 05 september 2002 @ 02:38:
[...]
Sowieso doe je het meestal zo:
C++:
1 2 3 4 5 6 7 8 class MyBaseObject { public: // Methods ... void* operator new(size_t p_Size); void operator delete(void* p_Block); };
Zodat je niet iedere boerenlul met jouw alloc routines opscheept maar alleen objecten uit je eigen classtree.
Dat werkt anders dan new en delete operatoren in een namespace definieren. Als jij new en delete operatoren in een namespace definieert en je gebruikt die operatoren in je eigen klassen, dan worden alle allocaties en deallocaties met je eigen routine gedaan. Iemand die van buiten de namespace een instantie van een van jou klassen aanmaakt gaat niet via die new en delete operatoren (tenzij je ze used natuurlijk
Als je new en delete operatoren in een klasse definieert dan werkt het precies andersom: allocaties binnen de klasse gaan via de reguliere new/delete operatoren en als mensen die jouw klasse instantieren met new dan wordt de new operator van jouw klasse aangeroepen
PS. check je mail
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Dat werkt dus niet betrouwbaar. PODs hebben geen vastgelegde padding. Je kunt ze dus wel veilig naar een andere POD met dezelfde layout kopieren (lees: naar object met hetzelfde type) maar niet noodzakelijkerwijs naar HW met fixed layout.Zoijar schreef op 04 september 2002 @ 23:15:
[...]
Soms wil je wel nog steeds basic structs gebruiken (ofwel POD types, plain old data types) Dit vanwege de standaard garantie dat POD types gekopieerd kunnen worden via een memcopy ter grote van sizeof(POD). Dat is wel handig als je bv packets naar een netwerk kaart memory mapped IO wilt dumpen.
(Of bedoel je dat je aan de andere kant v/h netwerk jouw programma ze dan veilig van het netwerk in zo'n POD kan kopieren? Dat werkt natuurlijk wel).
Overigens heeft class vs. struct niets met POD-ness te maken. struct{ is gewoon een korte maniet om class{public: te schrijven.
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein
Wat juist handig is zodat je alleen leaks controleert van je eigen framework en niet eventuele (wellicht bedoelde!) leaks van andere classes....oisyn schreef op 05 september 2002 @ 17:33:
in een klasse definieert dan werkt het precies andersom: allocaties binnen de klasse gaan via de reguliere new/delete operatoren en als mensen die jouw klasse instantieren met new dan wordt de new operator van jouw klasse aangeroepen
Uh okayPS. check je mail