Search⌘ K
AI Features

Custom Memory Allocator

Explore how to create and integrate custom memory allocators with standard C++ containers such as std::vector and std::shared_ptr. Understand the differences between stateless and stateful allocators, and leverage stack-allocated arenas to reduce dynamic memory usage. This lesson helps you optimize memory management for high-performance C++ applications.

Using a custom memory allocator with standard library containers

When trying out our custom memory manager with a specific type, it worked great! There is a problem, though. It turns out that the class-specific operator new is not called on all the occasions we might have expected. Consider the following code:

C++
auto user = std::make_shared<User>();

What happens when we want to have a std::vector of 10 users?

C++
auto users = std::vector<User>{};
users.reserve(10);

In neither of the two cases is our custom memory manager being used. Why? Starting with the shared pointer, we have to go back to the example earlier where we saw that std::make_shared() allocates memory for both reference counting data and the object it should point to. No way std::make_shared () can use an expression such as new User() to create the user object and the counter with only one allocation. Instead, it allocates memory and constructs the user object using placement new.

The std::vector object is similar. It doesn’t construct 1010 ...