1755042 Members
3593 Online
108828 Solutions
New Discussion юеВ

Memory leak issue

 
Atul Goel
Frequent Advisor

Re: Memory leak issue

Firstly my application is single threaded. mallocnextgen is useful for multi threaded application
Secondly mallocnextgen is for itanium server but my build is made (or is should say cross compiled )on a pa-risc system where i cannot install this mallocnextgen

Does anybody had a quick look on the data i attached? I would request you to have a quick look. File is not of much size and only a look will give an idea of memory issue to experts.
Dennis Handly
Acclaimed Contributor

Re: Memory leak issue

>Firstly my application is single threaded. mallocnextgen is useful for multi threaded application

(Last time you said "Yes, it is a multi threaded application."?)

Do you know it won't help? The specs don't say it is only useful for threads.

If it is single threaded, you are allocating memory in a non-optimal manner. And from your other thread, you may need to special case your allocators for various block sizes, 64028, 120 4944, 40, 48, 12, 28, 64.

>where I cannot install this mallocnextgen

You simply install it on your Integrity box and then copy the shlib to your PA box.
Atul Goel
Frequent Advisor

Re: Memory leak issue


"If it is single threaded, you are allocating memory in a non-optimal manner. And from your other thread, you may need to special case your allocators for various block sizes, 64028, 120 4944, 40, 48, 12, 28, 64."

>>>Can you kindly explain this in a bit more detail.
Dennis Handly
Acclaimed Contributor

Re: Memory leak issue

>>you are allocating memory in a non-optimal manner. you may need to special case your allocators for various block sizes, 64028, 120 4944, 40, 48, 12, 28, 64."

>Can you kindly explain this in a bit more detail?

If you are allocating memory with random sizes and continually malloc and freeing this space, you will eventually fragment the heap.
Assuming the above block sizes, which have lots of allocations, if you get N blocks of 64028 and then you free N - M. You would end up with M blocks of 64028 and N - M freed blocks of 64028.

Suppose you then want to allocate blocks of 4944, those freed larger blocks would be used. Pretty soon those large blocks are broken up into smaller blocks, that can't be used for 64028 requests, so the arena grows.

What you could do is make a special allocator that only serves up 64028 byte blocks and when they are freed, it keeps them on a linked list for later use. That way these 64028 blocks won't get fragmented.

But this means you have to take up the burden of managing these blocks. Can you do a better job, if you know what your application does?

But the simplest way to solve this to see if MallocNextGen helps.