...

/

Custom Memory Management

Custom Memory Management

Learn how to design custom memory management techniques for your code.

We'll cover the following...

Designing a custom memory

We have come a long way in this chapter now. We have covered the basics of virtual memory, the stack and the heap, the new and delete expressions, memory ownership, and alignment and padding. But before we close this chapter, we will show how to customize memory management in C++. We will see how the parts we went through earlier in this chapter will come in handy when writing a custom memory allocator.

But first, what is a custom memory manager, and why do we need one?

When using new or malloc() to allocate memory, we use the built-in memory management system in C++. Most implementations of operator new use malloc(), a general-purpose memory allocator. Designing and building a general-purpose memory manager is a complicated task, and there are many people who have already spent a lot of time researching this topic. Still, there are several reasons why we might want to write a custom memory manager. Here are some examples:

  • Debugging and diagnostics: We have already done this a couple of times in this chapter by overloading operator new and operator delete, just to print out some debugging information.

  • Sandboxing: A custom memory manager can provide a sandbox for code that isn’t allowed to allocate unrestricted memory. The sandbox can also track memory allocations and release memory when the sandboxed code finishes executing.

  • Performance: If we need dynamic memory and can’t avoid allocations, we may have to write a custom memory manager that performs ...