By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,852 Members | 2,240 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,852 IT Pros & Developers. It's quick & easy.

try to maka a program run out of memory

P: n/a
Hello experts!!

I have written a small program that I hope will run out of memory(just for
testing) because i have deliberately removed the delete of the allocated
memory but it will not run out of memory.
So my question is can you see why not this program will run out of memory.
It consist of three files these are start.cpp,test.h and slask.h

// Here is the file containing the main funtion called start.cpp
#include "test.h"
main()
{
Test testobj;
for (long i =0; i<999999999; i++)
testobj.foo();
}

//Here is file test.h containing the class definition of class Test
#include "slask.h"
class Test
{
public:
void foo()
{ s = new Slask(); }
private:
Slask* s;
};

//Here is the last file named slask.h containg the class definition of class
Slask.
class Slask
{
public:
private:
char namn1[1000];
char namn2[1000];
};

Many thanks
//Tony
Jul 23 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
Tony Johansson wrote:
I have written a small program that I hope will run out of memory(just for
testing) because i have deliberately removed the delete of the allocated
memory but it will not run out of memory.
So my question is can you see why not this program will run out of memory.
It consist of three files these are start.cpp,test.h and slask.h


Hi,

i can only talk about the linux behaviour of this program:

it runs out of memory if you have no swap-memory. I ran the program and
my harddisk got very busy, that means that the system uses the swap-area
on the harddisk to allocate new items. I didn`t look what happens if the
system is out of swap ... could take hours

regards marbac

Jul 23 '05 #2

P: n/a
Tony Johansson schrieb:
Hello experts!!

I have written a small program that I hope will run out of memory(just for
testing) because i have deliberately removed the delete of the allocated
memory but it will not run out of memory.
So my question is can you see why not this program will run out of memory.
It consist of three files these are start.cpp,test.h and slask.h
One possibility might be your impatience ;-)
I added a try...catch around your loop in main and got a std::bad_alloc
exception as expected...it took this box (Athlon XP 2400+, 256MB, WinXP)
some 15 minutes to get there though. Meanwhile I could see the C++
library's (mingw) exponential allocator at work: at first the program
almost immediately hogged 256MB, then 512MB, 1GB where it became really
slow due to swapping and new allocations were again decreasing in size
(by a factor of 0.5) which makes sense when you take into account that
there is an absolute maximum of 2GB of per process memory on this
platform, which is exactly what the program had allocated when the
exception was thrown.
If your platform doesn't have such a "low" limit, it could take a lot
longer run out of memory. To speed things up, you could deactivate any
swap...another one would be to drastically increase Slask's size or
simply alloc blocks of a GB or so if you want to force an OOM condition.

Another possibility is that you're using an old compiler that doesn't
throw std::bad_alloc but returns a null pointer when the allocation
fails. Did you check that? Given that your compiler accepted the below
error (implicit int is not part of Standard C++), maybe it has other
non-conforming behaviour too...
// Here is the file containing the main funtion called start.cpp
#include "test.h"
main() int main()
{
Test testobj;
for (long i =0; i<999999999; i++)
testobj.foo();
}


Cheers,
Malte
Jul 23 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.