Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

Skid

Writing your own 'new' operator ?

This topic is 6800 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Are there any implementations of the ''new'' operator I could take a look at to find out how it works and how to go about writing a custom one ? Any links to memory management techniques would be great as well. Thanks

Share this post


Link to post
Share on other sites
Advertisement
Here''s a brainless approach just so you can see the syntax:

void* operator new (unsigned int num_bytes)
{
return malloc(num_bytes);
}

void operator delete (void* p)
{
if (p) free(p);
}


Share this post


Link to post
Share on other sites
Most overloads of new I''ve seen are simply calls to custom mallocs. One relatively non-trivial set of overloads for new can be seen in Boehm''s garbage collection library available from Xerox. But even that seems to be just special if statements to handle various placement options to it''s malloc version.

Share this post


Link to post
Share on other sites
I think it''s not necessary to write an own implementation of the new operator, you could call malloc() instead of using it. The memory managment is done by system so you don''t need to care so much about it.

Visit our homepage: www.rarebyte.de.st

GA

Share this post


Link to post
Share on other sites
Actually, ga, overloading the new operator is useful when implementing garbage collection or leak tracking transparently. Not to mention the syntax is cleaner to call new rather than a call to malloc and then a call to the constructor.

Share this post


Link to post
Share on other sites
Overloading new can be useful in many situations:

1) Using domain-specific knowledge to optimize memory allocation. For instance, if you are using buffers of a known size you can preallocate a large block of buffers and use an overload of new to divy them out. Note that in general, using a lot of fixed-size allocators can explicitly fragment the heap.

2) You may need to override new to allocate memory from a specific area - i.e. shared memory.

3) You can overload new to include more domain-specific debugging information in your debug builds.

4) I once overloaded new so I could automatically detect if an object had been allocated from the heap or allocated statically on the stack or as part of another object. I needed this for a reference counting mechanism I developed - I would turn off reference counting on statically allocated objects.

As far as reading about memory allocation in general, any good Operating Systems book is going to have a stuff about heap management. I recommend "Modern Operating Systems" by Andrew Tanenbaum.

-vince


Share this post


Link to post
Share on other sites
Actually, I heard you can explicitly state the memory location to create the object in, like so:

Data = new(Location) Type(Parameters);


So instead of pushing data onto the stack:

RECT* pRect = new RECT;


You allocate it at a specified location, dwLocation, like this:

RECT* pRect = new(dwLocation) RECT;

I''ve never actually tried it, so I may have gotten the syntax wrong.

~CGameProgrammer( );

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!