Suite for benchmarking malloc implementations, originally
developed for benchmarking mimalloc.
Collection of various benchmarks from the academic literature, together with
automated scripts to pull specific versions of benchmark programs and
allocators from Github and build them.
Due to the large variance in programs and allocators, the suite is currently
only developed for Unix-like systems, and specifically Ubuntu with apt-get, Fedora with dnf,
and macOS (for a limited set of allocators and benchmarks).
The only system-installed allocator used is glibc's implementation that ships as part of Linux's libc.
All other allocators are downloaded and built as part of build-bench-env.sh --
if you are looking to run these benchmarks on a different Linux distribution look at
the setup_packages function to see the packages required to build the full set of
allocators.
It is quite easy to add new benchmarks and allocator implementations -- please do so!.
Enjoy, Daan
Note that all the code in the bench directory is not part of
mimalloc-bench as such, and all programs in the bench directory are
governed under their own specific licenses and copyrights as detailed in
their README.md (or license.txt) files. They are just included here for convenience.
The build-bench-env.sh script with the all argument will automatically pull
all needed benchmarks and allocators and build them in the extern directory:
~/dev/mimalloc-bench> ./build-bench-env.sh all
It starts installing packages and you will need to enter the sudo password.
All other programs are build in the mimalloc-bench/extern directory.
Use ./build-bench-env.sh -h to see all options.
If everything succeeded, you can run the full benchmark suite (from out/bench) as:
~/dev/mimalloc-bench> cd out/bench~/dev/mimalloc-bench/out/bench>../../bench.sh alla alltOr just test mimalloc and tcmalloc on cfrac and larson with 16 threads:
~/dev/mimalloc-bench/out/bench>../../bench.sh --procs=16 mi tc cfrac larsonOr run the quick essential benchmark set (quickt) and append the matching
KQ benchmark group explicitly:
~/dev/mimalloc-bench/out/bench>../../bench.sh --procs=\nproc` -r=5 -n=1 -s=1 kq_09 je tc mi quickt kq_bench_09`Generally, you can specify the allocators (mi, je,
tc, hd, sys (system allocator)) etc, and the benchmarks
, cfrac, espresso, barnes, lean, larson, alloc-test, cscratch, etc.
Or all allocators (alla) and tests (allt).
Use --procs=<n> to set the concurrency, and use --help to see all supported
allocators and benchmarks.
Supported allocators are as follow, see build-bench-env.sh for the versions:
The first set of benchmarks are real world programs, or are trying to mimic some, and consists of:
cfrac and espresso but is multithreaded../lean --make -j N). Big real-world workload with intensive
allocations.The second set of benchmarks are stress tests and consist of:
94f6cb
(master, 2018-07-04)malloc_benchmark benchmark from
boostkit/kqmalloc
v0.19.0-beta0, built as extern/kq_bench with make clean kunpeng.
These group aliases expand to kq_bench_<hip>_m0, kq_bench_<hip>_m1,
and kq_bench_<hip>_m2; each item runs one mode with
-threads N -affinity 0.mallctl
(Allocated/RSS, Dirty/RSS, Metadata/Allocated, ChurnRate, 16-32K alloc
count) and validates whether the bench shape matches real-service profiles.
Three entry points: run_sanity.sh (single-run KPI PASS/FAIL),
run.sh (B0 vs A multi-round compare with MAD/median noise floor), and
the main bench.sh recommend-like driver — see
bench/recommend-like/README.md.
Jemalloc-only: the bench binary links jemalloc at compile time for
the stats interface, so bench.sh filters alloc_run against a
jemalloc-family whitelist (je myje myje-base, overridable via
RECOMMEND_LIKE_ALLOCS) and warns + skips on other allocators to avoid
writing meaningless KPI rows into benchres.csv. Example:
../../bench.sh je recommend-like (OK),
../../bench.sh tc mi recommend-like (skipped).Finally, there is a security benchmark aiming at checking basic security properties of allocators.
The full benchmark suite covers the following key evaluation dimensions:
| Dimension | Benchmarks |
|---|---|
| Single-thread throughput | cfrac, espresso, glibc-simple, alloc-test1 |
| Multi-thread scalability | leanN, alloc-testN, sh8bench, xmalloc-testN, glibc-thread |
| Cross-thread object migration | larson, sh8bench, xmalloc-test, mstress |
| Cache locality / false sharing | cache-scratch, cache-thrash, espresso |
| Large allocation efficiency | malloc-large |
| Memory footprint / fragmentation | all benchmarks (RSS peak recorded) |
| Thread-exit memory reclamation | mleak |
| Real-world application workloads | redis, gs, lean, lua, linux, rocksdb, z3, spec |
| Security properties | security (double-free, overflow, underflow, use-after-free, …) |
The table below ranks each benchmark by two criteria:
| Rank | Benchmark | Generality | Effectiveness | Rationale |
|---|---|---|---|---|
| 1 | leanN | ★★★★★ | ★★★★★ | Large real-world multi-threaded compiler workload with intensive allocations; best at exposing practical performance differences |
| 2 | alloc-testN | ★★★★☆ | ★★★★★ | Pareto-distributed sizes mimic realistic programs; 100M allocs/thread sharply differentiates throughput |
| 3 | larson / larson-sized | ★★★★★ | ★★★★☆ | Classic server cross-thread "bleeding" pattern; used in nearly every allocator paper |
| 4 | cfrac | ★★★★☆ | ★★★★☆ | Canonical single-thread small-object benchmark; clearly exposes single-threaded allocation efficiency |
| 5 | xmalloc-testN | ★★★☆☆ | ★★★★★ | Extreme producer/consumer asymmetry; most effective at exposing weaknesses in thread-local caching strategies |
| 6 | cache-scratch | ★★★☆☆ | ★★★★★ | Precisely measures passive false sharing; the only test that effectively detects this critical issue |
| 7 | redis | ★★★★★ | ★★★☆☆ | High real-world relevance (server workload), but allocator differences are typically small |
| 8 | mstress | ★★★★☆ | ★★★★☆ | Multi-phase thread recreation with object migration; good all-round stress test |
| 9 | espresso | ★★★★☆ | ★★★☆☆ | Classic cache-locality benchmark, but single-threaded nature limits discriminative power |
| 10 | rptest | ★★★☆☆ | ★★★★☆ | Highly configurable; covers multiple dimensions, but use-case is narrower |
| 11 | linux | ★★★★★ | ★★★☆☆ | Most realistic build workload; allocator impact is often overshadowed by I/O |
| 12 | rocksdb | ★★★★☆ | ★★★☆☆ | Good database-workload coverage; bottleneck is often I/O rather than allocation |
| 13 | sh6bench / sh8bench | ★★★☆☆ | ★★★☆☆ | Classic stress tests with synthetic free-order patterns |
| 14 | malloc-large | ★★★☆☆ | ★★★☆☆ | Specific but important large-allocation scenario |
| 15 | barnes | ★★★☆☆ | ★★☆☆☆ | Too few allocations to meaningfully differentiate allocators |
| 16 | security (135 tests) | ★★★★☆ | ★★★★★ | Unique safety dimension; measures security properties rather than performance |
| 17 | mleak | ★★☆☆☆ | ★★★★☆ | Narrow scenario, but the thread-exit leak issue it detects is critical |
| 18 | spec | ★★★★★ | ★★★★☆ | Industry-standard suite; requires a separate SPEC CPU 2017 installation |
| 19 | glibc-simple / glibc-thread | ★★★☆☆ | ★★☆☆☆ | Simple glibc-derived patterns with limited discriminative power |
| 20 | z3, gs, lua, lean-mathlib, rbstress, cache-thrash | ★★☆☆☆ | ★★☆☆☆ | Supplementary tests covering long-tail scenarios |
quickt)For a fast but representative evaluation, use the quickt option and append
the matching KQ benchmark group explicitly:
~/dev/mimalloc-bench/out/bench> ../../bench.sh --procs=`nproc` -r=5 -n=1 -s=1 kq_09 je tc mi quickt kq_bench_09
This runs carefully selected benchmarks that together cover the most important and distinct evaluation dimensions:
| Benchmark | Key Dimension | Why Selected |
|---|---|---|
| cfrac | Single-thread small-object throughput | The canonical baseline for pure allocation speed; fast and low-noise |
| alloc-testN | Multi-thread scalability | Pareto size distribution; 100M allocs/thread yields the clearest throughput signal |
| larson-sized | Cross-thread object migration + sized deallocation | Represents server workloads where objects are freed by threads other than their allocator; also exercises the sized-free fast path |
| leanN | Real-world dense multi-thread allocation | Large-scale compiler workload; most predictive of real application performance |
| redis | Real-world single-threaded workload | High real-world relevance (server workload) |
| rocksdb | Real-world storage engine workload | Good database-workload coverage; bottleneck is often I/O rather than allocation; but particularly effective for validating memory usage characteristics |
| kq_bench_08/09/12 | KQ malloc stress modes | Optional group aliases that run the kqmalloc malloc_benchmark modes using explicit HIP08, HIP09, or HIP12 binaries |
These benchmarks cover single-threaded performance, multi-threaded scalability, cross-thread migration, real-world behavior, and memory usage - together giving a meaningful and well-rounded picture of allocator quality.
For a more thorough evaluation, add xmalloc-test, mstress, cache-scratch,
malloc-large, and security to cover extreme cross-thread patterns, large
allocations, false-sharing detection, and security properties.
run_quickt.shrun_quickt.sh is a convenience wrapper that runs the quickt set, appends
the CPU-matched kq_bench group, and immediately feeds the results through
scripts/analyze_bench.py (median, MAD, and ratio tables appended to
benchres.csv).
# Default: auto-detects KQ allocator and kq_bench variants from CPU part, plus je tc mi
./run_quickt.sh
# Explicit allocator list
./run_quickt.sh kq_09 je tc mi
# Override rounds and core count
ROUNDS=3 PROCS=4 ./run_quickt.sh kq_09 je tc mi
The script auto-detects the KQ allocator and matching kq_bench variant from
/proc/cpuinfo:
| CPU part | Allocator | kq_bench |
|---|---|---|
0xd06 | kq_12 | kq_bench_12 |
0xd02 | kq_09 | kq_bench_09 |
| other | kq_08 | kq_bench_08 |
After the run, scripts/analyze_bench.py prints median, MAD, and ratio
tables to stdout and appends them to out/bench/benchres.csv.
Below is an example (Apr 2019) of the benchmark results on an HP Z4-G4 workstation with a 4-core Intel® Xeon® W2123 at 3.6 GHz with 16GB ECC memory, running Ubuntu 18.04.1 with LibC 2.27 and GCC 7.3.0.
Memory usage:
(note: the xmalloc-testN memory usage should be disregarded is it allocates more the faster the program runs. Unfortunately, there are no entries for SuperMalloc in the leanN and xmalloc-testN benchmarks as it faulted on those)
[1] Emery D. Berger, Kathryn S. McKinley, Robert D. Blumofe, and Paul R. Wilson. Hoard: A Scalable Memory Allocator for Multithreaded Applications the Ninth International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS-IX). Cambridge, MA, November 2000. pdf
[2] P. Larson and M. Krishnan. Memory allocation for long-running server applications. In ISMM, Vancouver, B.C., Canada, 1998. pdf
[3] D. Grunwald, B. Zorn, and R. Henderson. Improving the cache locality of memory allocation. In R. Cartwright, editor, Proceedings of the Conference on Programming Language Design and Implementation, pages 177–186, New York, NY, USA, June 1993. pdf
[4] J. Barnes and P. Hut. A hierarchical O(n*log(n)) force-calculation algorithm. Nature, 324:446-449, 1986.
[5] C. Lever, and D. Boreham. Malloc() Performance in a Multithreaded Linux Environment. In USENIX Annual Technical Conference, Freenix Session. San Diego, CA. Jun. 2000. Available at https://github.com/kuszmaul/SuperMalloc/tree/master/tests
[6] Timothy Crundal. Reducing Active-False Sharing in TCMalloc. 2016. http://courses.cecs.anu.edu.au/courses/CSPROJECTS/16S1/Reports/Timothy*Crundal*Report.pdf. CS16S1 project at the Australian National University.
[7] Alexey Kukanov, and Michael J Voss. The Foundations for Scalable Multi-Core Software in Intel Threading Building Blocks. Intel Technology Journal 11 (4). 2007
[8] Paul Liétar, Theodore Butler, Sylvan Clebsch, Sophia Drossopoulou, Juliana Franco, Matthew J Parkinson, Alex Shamis, Christoph M Wintersteiger, and David Chisnall. Snmalloc: A Message Passing Allocator. In Proceedings of the 2019 ACM SIGPLAN International Symposium on Memory Management, 122–135. ACM. 2019.
C
81.4%
Shell
7.4%
C++
7.0%
Python
3.4%
Suite for benchmarking malloc implementations, originally
developed for benchmarking mimalloc.
Collection of various benchmarks from the academic literature, together with
automated scripts to pull specific versions of benchmark programs and
allocators from Github and build them.
Due to the large variance in programs and allocators, the suite is currently
only developed for Unix-like systems, and specifically Ubuntu with apt-get, Fedora with dnf,
and macOS (for a limited set of allocators and benchmarks).
The only system-installed allocator used is glibc's implementation that ships as part of Linux's libc.
All other allocators are downloaded and built as part of build-bench-env.sh --
if you are looking to run these benchmarks on a different Linux distribution look at
the setup_packages function to see the packages required to build the full set of
allocators.
It is quite easy to add new benchmarks and allocator implementations -- please do so!.
Enjoy, Daan
Note that all the code in the bench directory is not part of
mimalloc-bench as such, and all programs in the bench directory are
governed under their own specific licenses and copyrights as detailed in
their README.md (or license.txt) files. They are just included here for convenience.
The build-bench-env.sh script with the all argument will automatically pull
all needed benchmarks and allocators and build them in the extern directory:
~/dev/mimalloc-bench> ./build-bench-env.sh all
It starts installing packages and you will need to enter the sudo password.
All other programs are build in the mimalloc-bench/extern directory.
Use ./build-bench-env.sh -h to see all options.
If everything succeeded, you can run the full benchmark suite (from out/bench) as:
~/dev/mimalloc-bench> cd out/bench~/dev/mimalloc-bench/out/bench>../../bench.sh alla alltOr just test mimalloc and tcmalloc on cfrac and larson with 16 threads:
~/dev/mimalloc-bench/out/bench>../../bench.sh --procs=16 mi tc cfrac larsonOr run the quick essential benchmark set (quickt) and append the matching
KQ benchmark group explicitly:
~/dev/mimalloc-bench/out/bench>../../bench.sh --procs=\nproc` -r=5 -n=1 -s=1 kq_09 je tc mi quickt kq_bench_09`Generally, you can specify the allocators (mi, je,
tc, hd, sys (system allocator)) etc, and the benchmarks
, cfrac, espresso, barnes, lean, larson, alloc-test, cscratch, etc.
Or all allocators (alla) and tests (allt).
Use --procs=<n> to set the concurrency, and use --help to see all supported
allocators and benchmarks.
Supported allocators are as follow, see build-bench-env.sh for the versions:
The first set of benchmarks are real world programs, or are trying to mimic some, and consists of:
cfrac and espresso but is multithreaded../lean --make -j N). Big real-world workload with intensive
allocations.The second set of benchmarks are stress tests and consist of:
94f6cb
(master, 2018-07-04)malloc_benchmark benchmark from
boostkit/kqmalloc
v0.19.0-beta0, built as extern/kq_bench with make clean kunpeng.
These group aliases expand to kq_bench_<hip>_m0, kq_bench_<hip>_m1,
and kq_bench_<hip>_m2; each item runs one mode with
-threads N -affinity 0.mallctl
(Allocated/RSS, Dirty/RSS, Metadata/Allocated, ChurnRate, 16-32K alloc
count) and validates whether the bench shape matches real-service profiles.
Three entry points: run_sanity.sh (single-run KPI PASS/FAIL),
run.sh (B0 vs A multi-round compare with MAD/median noise floor), and
the main bench.sh recommend-like driver — see
bench/recommend-like/README.md.
Jemalloc-only: the bench binary links jemalloc at compile time for
the stats interface, so bench.sh filters alloc_run against a
jemalloc-family whitelist (je myje myje-base, overridable via
RECOMMEND_LIKE_ALLOCS) and warns + skips on other allocators to avoid
writing meaningless KPI rows into benchres.csv. Example:
../../bench.sh je recommend-like (OK),
../../bench.sh tc mi recommend-like (skipped).Finally, there is a security benchmark aiming at checking basic security properties of allocators.
The full benchmark suite covers the following key evaluation dimensions:
| Dimension | Benchmarks |
|---|---|
| Single-thread throughput | cfrac, espresso, glibc-simple, alloc-test1 |
| Multi-thread scalability | leanN, alloc-testN, sh8bench, xmalloc-testN, glibc-thread |
| Cross-thread object migration | larson, sh8bench, xmalloc-test, mstress |
| Cache locality / false sharing | cache-scratch, cache-thrash, espresso |
| Large allocation efficiency | malloc-large |
| Memory footprint / fragmentation | all benchmarks (RSS peak recorded) |
| Thread-exit memory reclamation | mleak |
| Real-world application workloads | redis, gs, lean, lua, linux, rocksdb, z3, spec |
| Security properties | security (double-free, overflow, underflow, use-after-free, …) |
The table below ranks each benchmark by two criteria:
| Rank | Benchmark | Generality | Effectiveness | Rationale |
|---|---|---|---|---|
| 1 | leanN | ★★★★★ | ★★★★★ | Large real-world multi-threaded compiler workload with intensive allocations; best at exposing practical performance differences |
| 2 | alloc-testN | ★★★★☆ | ★★★★★ | Pareto-distributed sizes mimic realistic programs; 100M allocs/thread sharply differentiates throughput |
| 3 | larson / larson-sized | ★★★★★ | ★★★★☆ | Classic server cross-thread "bleeding" pattern; used in nearly every allocator paper |
| 4 | cfrac | ★★★★☆ | ★★★★☆ | Canonical single-thread small-object benchmark; clearly exposes single-threaded allocation efficiency |
| 5 | xmalloc-testN | ★★★☆☆ | ★★★★★ | Extreme producer/consumer asymmetry; most effective at exposing weaknesses in thread-local caching strategies |
| 6 | cache-scratch | ★★★☆☆ | ★★★★★ | Precisely measures passive false sharing; the only test that effectively detects this critical issue |
| 7 | redis | ★★★★★ | ★★★☆☆ | High real-world relevance (server workload), but allocator differences are typically small |
| 8 | mstress | ★★★★☆ | ★★★★☆ | Multi-phase thread recreation with object migration; good all-round stress test |
| 9 | espresso | ★★★★☆ | ★★★☆☆ | Classic cache-locality benchmark, but single-threaded nature limits discriminative power |
| 10 | rptest | ★★★☆☆ | ★★★★☆ | Highly configurable; covers multiple dimensions, but use-case is narrower |
| 11 | linux | ★★★★★ | ★★★☆☆ | Most realistic build workload; allocator impact is often overshadowed by I/O |
| 12 | rocksdb | ★★★★☆ | ★★★☆☆ | Good database-workload coverage; bottleneck is often I/O rather than allocation |
| 13 | sh6bench / sh8bench | ★★★☆☆ | ★★★☆☆ | Classic stress tests with synthetic free-order patterns |
| 14 | malloc-large | ★★★☆☆ | ★★★☆☆ | Specific but important large-allocation scenario |
| 15 | barnes | ★★★☆☆ | ★★☆☆☆ | Too few allocations to meaningfully differentiate allocators |
| 16 | security (135 tests) | ★★★★☆ | ★★★★★ | Unique safety dimension; measures security properties rather than performance |
| 17 | mleak | ★★☆☆☆ | ★★★★☆ | Narrow scenario, but the thread-exit leak issue it detects is critical |
| 18 | spec | ★★★★★ | ★★★★☆ | Industry-standard suite; requires a separate SPEC CPU 2017 installation |
| 19 | glibc-simple / glibc-thread | ★★★☆☆ | ★★☆☆☆ | Simple glibc-derived patterns with limited discriminative power |
| 20 | z3, gs, lua, lean-mathlib, rbstress, cache-thrash | ★★☆☆☆ | ★★☆☆☆ | Supplementary tests covering long-tail scenarios |
quickt)For a fast but representative evaluation, use the quickt option and append
the matching KQ benchmark group explicitly:
~/dev/mimalloc-bench/out/bench> ../../bench.sh --procs=`nproc` -r=5 -n=1 -s=1 kq_09 je tc mi quickt kq_bench_09
This runs carefully selected benchmarks that together cover the most important and distinct evaluation dimensions:
| Benchmark | Key Dimension | Why Selected |
|---|---|---|
| cfrac | Single-thread small-object throughput | The canonical baseline for pure allocation speed; fast and low-noise |
| alloc-testN | Multi-thread scalability | Pareto size distribution; 100M allocs/thread yields the clearest throughput signal |
| larson-sized | Cross-thread object migration + sized deallocation | Represents server workloads where objects are freed by threads other than their allocator; also exercises the sized-free fast path |
| leanN | Real-world dense multi-thread allocation | Large-scale compiler workload; most predictive of real application performance |
| redis | Real-world single-threaded workload | High real-world relevance (server workload) |
| rocksdb | Real-world storage engine workload | Good database-workload coverage; bottleneck is often I/O rather than allocation; but particularly effective for validating memory usage characteristics |
| kq_bench_08/09/12 | KQ malloc stress modes | Optional group aliases that run the kqmalloc malloc_benchmark modes using explicit HIP08, HIP09, or HIP12 binaries |
These benchmarks cover single-threaded performance, multi-threaded scalability, cross-thread migration, real-world behavior, and memory usage - together giving a meaningful and well-rounded picture of allocator quality.
For a more thorough evaluation, add xmalloc-test, mstress, cache-scratch,
malloc-large, and security to cover extreme cross-thread patterns, large
allocations, false-sharing detection, and security properties.
run_quickt.shrun_quickt.sh is a convenience wrapper that runs the quickt set, appends
the CPU-matched kq_bench group, and immediately feeds the results through
scripts/analyze_bench.py (median, MAD, and ratio tables appended to
benchres.csv).
# Default: auto-detects KQ allocator and kq_bench variants from CPU part, plus je tc mi
./run_quickt.sh
# Explicit allocator list
./run_quickt.sh kq_09 je tc mi
# Override rounds and core count
ROUNDS=3 PROCS=4 ./run_quickt.sh kq_09 je tc mi
The script auto-detects the KQ allocator and matching kq_bench variant from
/proc/cpuinfo:
| CPU part | Allocator | kq_bench |
|---|---|---|
0xd06 | kq_12 | kq_bench_12 |
0xd02 | kq_09 | kq_bench_09 |
| other | kq_08 | kq_bench_08 |
After the run, scripts/analyze_bench.py prints median, MAD, and ratio
tables to stdout and appends them to out/bench/benchres.csv.
Below is an example (Apr 2019) of the benchmark results on an HP Z4-G4 workstation with a 4-core Intel® Xeon® W2123 at 3.6 GHz with 16GB ECC memory, running Ubuntu 18.04.1 with LibC 2.27 and GCC 7.3.0.
Memory usage:
(note: the xmalloc-testN memory usage should be disregarded is it allocates more the faster the program runs. Unfortunately, there are no entries for SuperMalloc in the leanN and xmalloc-testN benchmarks as it faulted on those)
[1] Emery D. Berger, Kathryn S. McKinley, Robert D. Blumofe, and Paul R. Wilson. Hoard: A Scalable Memory Allocator for Multithreaded Applications the Ninth International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS-IX). Cambridge, MA, November 2000. pdf
[2] P. Larson and M. Krishnan. Memory allocation for long-running server applications. In ISMM, Vancouver, B.C., Canada, 1998. pdf
[3] D. Grunwald, B. Zorn, and R. Henderson. Improving the cache locality of memory allocation. In R. Cartwright, editor, Proceedings of the Conference on Programming Language Design and Implementation, pages 177–186, New York, NY, USA, June 1993. pdf
[4] J. Barnes and P. Hut. A hierarchical O(n*log(n)) force-calculation algorithm. Nature, 324:446-449, 1986.
[5] C. Lever, and D. Boreham. Malloc() Performance in a Multithreaded Linux Environment. In USENIX Annual Technical Conference, Freenix Session. San Diego, CA. Jun. 2000. Available at https://github.com/kuszmaul/SuperMalloc/tree/master/tests
[6] Timothy Crundal. Reducing Active-False Sharing in TCMalloc. 2016. http://courses.cecs.anu.edu.au/courses/CSPROJECTS/16S1/Reports/Timothy*Crundal*Report.pdf. CS16S1 project at the Australian National University.
[7] Alexey Kukanov, and Michael J Voss. The Foundations for Scalable Multi-Core Software in Intel Threading Building Blocks. Intel Technology Journal 11 (4). 2007
[8] Paul Liétar, Theodore Butler, Sylvan Clebsch, Sophia Drossopoulou, Juliana Franco, Matthew J Parkinson, Alex Shamis, Christoph M Wintersteiger, and David Chisnall. Snmalloc: A Message Passing Allocator. In Proceedings of the 2019 ACM SIGPLAN International Symposium on Memory Management, 122–135. ACM. 2019.
C
81.4%
Shell
7.4%
C++
7.0%
Python
3.4%