|
|
|
|
|
|
| Author |
Message |
Joost Witteveen *nix forums beginner
Joined: 21 Jul 2006
Posts: 1
|
Posted: Fri Jul 21, 2006 9:52 am Post subject:
Re: Where is this code not freeing memory ?
|
|
|
On 2006-07-21, wolverine <kiran.happy@gmail.com> wrote:
| Quote: | Now coming to the question. The code is supposed to take around (200000
* 100 * 4 bytes = 76MB) .The top command at halfway point (line 41)
showed around 80MB. Until now it is correct. But after this i start
deleting elements from vector one by one. Then the code is supposed to
take lesser memory. But the top command showed still 80MB.
Why is this ?
Because even when a program calls free(), the memory isn't actually |
returned to the OS, but rather it stays part of the program memory
pool, just marked as memory available to be used for the next malloc
call.
| Quote: | Let me tell that valgrind or purify is not showing any leak in the
code.
|
That's because there are no leaks!
| Quote: | I some how need to free from stl the memory
|
It's not just stl memory. You should also see it if you just use malloc.
(and maybe initialise the memory). However, if you, after the
free/destruction call malloc again, you'll see your memory usage doesn't
go up again, it's using the old memory again.
IIRC this is also the reason firefox seems to use so much memory: if you
at any time visited many big pages (many tabs), and closed all those tabs,
memory usage of firefox still is high.
If you really want to return the memory, maybe looking at how X does it
may help (I believe X does return memory) |
|
| Back to top |
|
 |
jithoosin *nix forums beginner
Joined: 21 Jul 2006
Posts: 6
|
Posted: Fri Jul 21, 2006 9:27 am Post subject:
Where is this code not freeing memory ?
|
|
|
Hi
Let me first of all tell that this problem is not specific to a
compiler like gcc. It even comes in windows. So please dont regard the
question as off topic.
I am posting a code using stl. I viewed the memory for program
by giving top command
eg: top -d 0.2 -p 'pid'
The pid will be printed out by the program itself.
Now coming to the question. The code is supposed to take around (200000
* 100 * 4 bytes = 76MB) .The top command at halfway point (line 41)
showed around 80MB. Until now it is correct. But after this i start
deleting elements from vector one by one. Then the code is supposed to
take lesser memory. But the top command showed still 80MB.
Why is this ?
I then googled and read in
http://www-1.ibm.com/support/docview.wss?rs=994&context=SSSHAD&dc=DB520&uid=swg21160634&loc=en_US&cs=UTF-8&lang=en
that stl "caches" memory and they gave a work around for it. I tried in
the code. Even that is not working.
Let me tell that valgrind or purify is not showing any leak in the
code. I some how need to free
from stl the memory. Is there any way ? Could any one help me ? I need
a general solution
which is applicable for all stl containers.
The code:
#include <vector>
#include <map>
#include<algorithm>
#include<unistd.h>
#include<iostream>
using namespace std;
//typedef vector <int, __malloc_alloc_template<0> > typIntVec;
//typedef map <long, typIntVec, std::less<long>,
//__malloc_alloc_template<0> > typLongIntVecMap;
typedef vector <int> typIntVec;
typedef map <long, typIntVec> typLongIntVecMap;
int main ()
{
typLongIntVecMap tMap;
cout<<"PID IS:"<<getpid()<<endl;
sleep(2);
cout<<"BEGIN EXECUTION."<<flush;
typLongIntVecMap::iterator tMapItr;
for (long j=1; j<200000; j++)
{
typIntVec vec;
for(int i=0; i<100; i++)
{
vec.push_back(i);
}
tMap[j] = vec;
if(j % 40000 == 0)
{
cout<<"."<<flush;
sleep(1);
}
}
cout<<endl<<"MEM IN STABLE POSITION......."<<endl;
cout<<"NOW IT SHOULD DECREASE";
sleep(2);
for (long j=1; j<200000; j++)
{
typIntVec& vecRef = tMap[j];
for(int i=0; i<100; i++)
{
typIntVec::iterator itr = find(vecRef.begin(), vecRef.end(), i);
if(itr != vecRef.end())
{
vecRef.erase(itr);
}
}
if(j % 40000 == 0)
{
cout<<"."<<flush;
sleep(1);
}
}
cout<<endl<<"MAP WITH NO ELEMENTS IS IN MEM NOW"<<endl;
sleep(2);
return 0;
}
Thanks in advance
Regards
Kiran Pradeep |
|
| Back to top |
|
 |
Google
|
|
| Back to top |
|
 |
|
|
The time now is Thu Nov 20, 2008 7:50 am | All times are GMT
|
|
Credit Card Debt Consolidation | Credit Cards | Mortgage Calculator | Mobile Phones | Car Insurance
|
|
Copyright © 2004-2005 DeniX Solutions SRL
|
|
|
|
Other DeniX Solutions sites:
Unix/Linux blog |
electronics forum |
medicine forum |
science forum |
|
|
Privacy Policy
|
Powered by phpBB © 2001, 2005 phpBB Group
|
|