A memory allocator that automatically reduces the memory footprint of C/C++ applications.
1,882
stars
1,176
commits
C++
primary language
Mar 25, 2026
updated
Mesh is a drop in replacement for malloc(3) that can transparently recover from memory fragmentation without any changes to application code.
Mesh is described in detail in a paper (PDF) that appeared at PLDI 2019.
Or watch this talk by Bobby Powers at Strange Loop:
Mesh runs on Linux and macOS. Windows is a work in progress.
Mesh uses bazel as a build system, but wraps it in a Makefile, and has no runtime dependencies other than libc:
$ git clone https://github.com/plasma-umass/mesh
$ cd mesh
$ make; sudo make install
# example: run git with mesh as its allocator:
$ LD_PRELOAD=libmesh.so git status
Please open an issue if you have questions (or issues)!
If you run a program linked against mesh (or with Mesh LD_PRELOADed), setting the variable MALLOCSTATS=1 will instruct mesh to print a summary at exit:
$ MALLOCSTATS=1 ./bin/redis-server-mesh ./redis.conf
25216:C 11 Mar 20:27:12.050 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
25216:C 11 Mar 20:27:12.050 # Redis version=4.0.2, bits=64, commit=dfe0d212, modified=0, pid=25216, just started
25216:C 11 Mar 20:27:12.050 # Configuration loaded
[...]
^C25216:signal-handler (1583983641) Received SIGINT scheduling shutdown...
25216:M 11 Mar 20:27:21.945 # User requested shutdown...
25216:M 11 Mar 20:27:21.945 * Removing the pid file.
25216:M 11 Mar 20:27:21.945 * Removing the unix socket file.
25216:M 11 Mar 20:27:21.945 # Redis is now ready to exit, bye bye...
MESH COUNT: 25918
Meshed MB (total): 101.2
Meshed pages HWM: 25918
Meshed MB HWM: 101.2
MH Alloc Count: 56775
MH Free Count: 17
MH High Water Mark: 82687
Not all workloads experience fragmentation, so its possible that Mesh will have a small 'Meshed MB (total)' number!
Mesh is built on Heap Layers, an infrastructure for building high performance memory allocators in C++ (see the paper for details.)
The entry point of the library is libmesh.cc.
This file is where malloc, free and the instantiations of the
Heap used for allocating program memory lives.
malloc(3)
reside within the arena.free(3)s can be fast and lock-free.C++
66.3%
Python
18.0%
C
8.8%
CMake
2.7%
Starlark
2.3%
Shell
1.1%
A memory allocator that automatically reduces the memory footprint of C/C++ applications.
1,882
stars
1,176
commits
C++
primary language
Mar 25, 2026
updated
Mesh is a drop in replacement for malloc(3) that can transparently recover from memory fragmentation without any changes to application code.
Mesh is described in detail in a paper (PDF) that appeared at PLDI 2019.
Or watch this talk by Bobby Powers at Strange Loop:
Mesh runs on Linux and macOS. Windows is a work in progress.
Mesh uses bazel as a build system, but wraps it in a Makefile, and has no runtime dependencies other than libc:
$ git clone https://github.com/plasma-umass/mesh
$ cd mesh
$ make; sudo make install
# example: run git with mesh as its allocator:
$ LD_PRELOAD=libmesh.so git status
Please open an issue if you have questions (or issues)!
If you run a program linked against mesh (or with Mesh LD_PRELOADed), setting the variable MALLOCSTATS=1 will instruct mesh to print a summary at exit:
$ MALLOCSTATS=1 ./bin/redis-server-mesh ./redis.conf
25216:C 11 Mar 20:27:12.050 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
25216:C 11 Mar 20:27:12.050 # Redis version=4.0.2, bits=64, commit=dfe0d212, modified=0, pid=25216, just started
25216:C 11 Mar 20:27:12.050 # Configuration loaded
[...]
^C25216:signal-handler (1583983641) Received SIGINT scheduling shutdown...
25216:M 11 Mar 20:27:21.945 # User requested shutdown...
25216:M 11 Mar 20:27:21.945 * Removing the pid file.
25216:M 11 Mar 20:27:21.945 * Removing the unix socket file.
25216:M 11 Mar 20:27:21.945 # Redis is now ready to exit, bye bye...
MESH COUNT: 25918
Meshed MB (total): 101.2
Meshed pages HWM: 25918
Meshed MB HWM: 101.2
MH Alloc Count: 56775
MH Free Count: 17
MH High Water Mark: 82687
Not all workloads experience fragmentation, so its possible that Mesh will have a small 'Meshed MB (total)' number!
Mesh is built on Heap Layers, an infrastructure for building high performance memory allocators in C++ (see the paper for details.)
The entry point of the library is libmesh.cc.
This file is where malloc, free and the instantiations of the
Heap used for allocating program memory lives.
malloc(3)
reside within the arena.free(3)s can be fast and lock-free.C++
66.3%
Python
18.0%
C
8.8%
CMake
2.7%
Starlark
2.3%
Shell
1.1%