Re: Does cocoa just leak?
Re: Does cocoa just leak?
- Subject: Re: Does cocoa just leak?
- From: Peter Ammon <email@hidden>
- Date: Sat, 29 Sep 2001 23:51:54 -0400
On Saturday, September 29, 2001, at 11:37 PM, Rosyna wrote:
I was trying to do a mem test on my app today. First trying to get a
base reading, before anything else occurred. So I have a window with a
pulsing button on it connected to some action. Thats all I have on it.
I launch the app, then go into top to see the mem usage. Ok. Then I
switch back to my app and notice the mem usage goes up. Switch back to
the terminal, mem usage goes back again. Try switching in and out
again, nothing happens. I think, "Oh well, must be a fluke" So I switch
in and out about 15 more times. After about every dozen or so switches
mem usage goes up a few k. And this is with an App that wasn't doing
anything.
To test my class I was doing:
for (i=0;i<5000;i++)
[instance URL];
This causes mem usage to go up about 500k. Thats not too bad, i guess.
I set the URL thats returned to autorelease inside the class. However,
doing:
for (i=0;i<5000;i++)
[[instance URL] path];
Causes the mem usage to go up to 5megs! thats a 4.5meg increase over
"base"!
and path is part of NSURL.
Now for the button on my application. Again, I was trying to get a base
mem level. All the button does when clicked is show an NSOpenPanel. I
opened it, mem use skyrocketed (compared to "base") nearly tripling in
value. I closed it to see if I could regain that mem back, only about a
.8 megs was returned. I do understand that it gives my app an Open
Panel to use so It doesn't have to keep loading it over and over.
Understanding that, I opened it and closed it a few more times, each
time all but .01-.05megs was returned to me.
Granted I could be doing something horribly wrong, but the Mem usage
seems odd to me. The above loops were done in awakeFromNib.
As far as I know, the alloc method is implemented using the calloc
function, and dealloc using free. A common implementation of free is to
not return the free'd memory to the general pool, but to keep it
available for subsequent calls to malloc or calloc. So the memory usage
may not go down even though the app is correctly calling free.
That said, Cocoa does leak, and how! Check out the leaks command line
tool for a rundown of the leaks in any process.
-Peter