The portable common runtime approach to interoperability
SOSP '89 Proceedings of the twelfth ACM symposium on Operating systems principles
Fast allocation and deallocation of memory based on object lifetimes
Software—Practice & Experience
The annotated C++ reference manual
The annotated C++ reference manual
OOPSLA/ECOOP '90 Proceedings of the European conference on object-oriented programming on Object-oriented programming systems, languages, and applications
The C++ programming language (2nd ed.)
The C++ programming language (2nd ed.)
The measured cost of conservative garbage collection
Software—Practice & Experience
Region-based memory management
Information and Computation
Memory management with explicit regions
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
The memory fragmentation problem: solved?
Proceedings of the 1st international symposium on Memory management
Cache-conscious structure layout
Proceedings of the ACM SIGPLAN 1999 conference on Programming language design and implementation
Conservative garbage collection for general memory allocators
Proceedings of the 2nd international symposium on Memory management
Communications of the ACM
Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation
Heap profiling for space-efficient Java
Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation
Composing high-performance memory allocators
Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation
Efficient representations and abstractions for quantifying and exploiting data reference locality
Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation
Hoard: a scalable memory allocator for multithreaded applications
ASPLOS IX Proceedings of the ninth international conference on Architectural support for programming languages and operating systems
Region-based memory management in cyclone
PLDI '02 Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation
Advanced Windows: The Developer's Guide to the WIN32 API for Windows NT 3.5 and Windows 95
Advanced Windows: The Developer's Guide to the WIN32 API for Windows NT 3.5 and Windows 95
Writing Apache Modules with PERL and C
Writing Apache Modules with PERL and C
A Retargetable C Compiler: Design and Implementation
A Retargetable C Compiler: Design and Implementation
The Real-Time Specification for Java
The Real-Time Specification for Java
Dynamic Storage Allocation: A Survey and Critical Review
IWMM '95 Proceedings of the International Workshop on Memory Management
An Implementation of Scoped Memory for Real-Time Java
EMSOFT '01 Proceedings of the First International Workshop on Embedded Software
Improving Cache Behavior of Dynamically Allocated Data Structures
PACT '98 Proceedings of the 1998 International Conference on Parallel Architectures and Compilation Techniques
Hi-index | 0.00 |
Programmers hoping to achieve performance improvements often use custom memory allocators. This in-depth study examines eight applications that use custom allocators. Surprisingly, for six of these applications, a state-of-the-art general-purpose allocator (the Lea allocator) performs as well as or better than the custom allocators. The two exceptions use regions, which deliver higher performance (improvements of up to 44%). Regions also reduce programmer burden and eliminate a source of memory leaks. However, we show that the inability of programmers to free individual objects within regions can lead to a substantial increase in memory consumption. Worse, this limitation precludes the use of regions for common programming idioms, reducing their usefulness. We present a generalization of general-purpose and region-based allocators that we call reaps. Reaps are a combination of regions and heaps, providing a full range of region semantics with the addition of individual object deletion. We show that our implementation of reaps provides high performance, outperforming other allocators with region-like semantics. We then use a case study to demonstrate the space advantages and software engineering benefits of reaps in practice. Our results indicate that programmers needing fast regions should use reaps, and that most programmers considering custom allocators should instead use the Lea allocator.