A fast, scalable, and memory-efficient drop-in replacement for malloc that improves performance of multithreaded applications on multicore systems.
Hoard is a memory allocator that serves as a drop-in replacement for system malloc, designed to improve the performance of multithreaded applications running on multiprocessor and multicore systems. It solves problems like heap contention, false sharing, and memory blowup that plague standard allocators in concurrent environments. The allocator works across Linux, Windows, and macOS without requiring any changes to application source code.
Developers building performance-critical multithreaded applications in C or C++ that run on multicore systems, particularly those experiencing scalability bottlenecks due to memory allocation. It's also valuable for system programmers and engineers working on servers, telephony systems, computational toolkits, and other allocation-intensive software.
Developers choose Hoard because it provides provable performance and memory guarantees while being completely transparent to existing code. Unlike standard allocators, it eliminates scalability bottlenecks, prevents false sharing, and bounds memory consumption—all through simple linking or environment variable configuration.
The Hoard Memory Allocator: A Fast, Scalable, and Memory-efficient Malloc for Linux, Windows, and Mac.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Requires no source code changes; works by linking or setting environment variables like LD_PRELOAD on Linux, making it easy to integrate with existing applications.
Eliminates heap contention that serializes threads, allowing programs to scale with CPU count, as evidenced by use in servers from companies like Cisco and SAP.
Designed to prevent threads on different CPUs from accessing memory in the same cache line, avoiding performance degradation that can be hundreds of times slower.
Guarantees bounded memory consumption, preventing blowup where memory needs scale with processor count, a key advantage over standard allocators.
Only works with programs compiled using /MD (dynamic C runtime) on Windows; /MT-compiled executables cannot be intercepted, limiting compatibility for some projects.
Requires using tools like withdll.exe or setdll.exe for injection, which adds extra steps and potential confusion compared to simpler Unix-like linking.
Optimized for multithreading, so it may introduce unnecessary overhead in single-threaded applications, potentially reducing performance in non-concurrent scenarios.