Table of Contents
Fetching ...

Heap vs. Stack: Analyzing Memory Allocations in C and C++ Open Source Software

Roman Korostinskiy, Eugene Darashkevich, Roman Rusyaev, Yegor Bugayenko

TL;DR

A wide variation in heap allocations is found, which suggests that heap allocations are actively employed in both C and C++ programs, and that C++ programs use heap less frequently than C programs.

Abstract

In C++, objects can be allocated in static memory, on the stack, or on the heap -- the latter being significantly more performance-costly than the former options. We hypothesized that programmers, particularly those involved in widely-used open-source projects, would be conscious of these performance costs and consequently avoid heap allocations. To test this hypothesis, we compiled and executed 797 automated tests across 13 C and 10 C++ open GitHub projects, measuring their heap allocations with Valgrind and stack allocations using DynamoRIO instrumentation. Our findings showed a wide variation in heap allocations, ranging from 0 to 99\% with an average of 9.26\%. We also found that C++ programs use heap less frequently than C programs. Contrary to our initial intuition, this suggests that heap allocations are actively employed in both C and C++ programs. Determining the prevalence of objects in these allocations remains a topic for future research.

Heap vs. Stack: Analyzing Memory Allocations in C and C++ Open Source Software

TL;DR

A wide variation in heap allocations is found, which suggests that heap allocations are actively employed in both C and C++ programs, and that C++ programs use heap less frequently than C programs.

Abstract

In C++, objects can be allocated in static memory, on the stack, or on the heap -- the latter being significantly more performance-costly than the former options. We hypothesized that programmers, particularly those involved in widely-used open-source projects, would be conscious of these performance costs and consequently avoid heap allocations. To test this hypothesis, we compiled and executed 797 automated tests across 13 C and 10 C++ open GitHub projects, measuring their heap allocations with Valgrind and stack allocations using DynamoRIO instrumentation. Our findings showed a wide variation in heap allocations, ranging from 0 to 99\% with an average of 9.26\%. We also found that C++ programs use heap less frequently than C programs. Contrary to our initial intuition, this suggests that heap allocations are actively employed in both C and C++ programs. Determining the prevalence of objects in these allocations remains a topic for future research.
Paper Structure (7 sections, 2 figures, 1 table)

This paper contains 7 sections, 2 figures, 1 table.

Figures (2)

  • Figure 1: Distribution of executables by the value of the fraction of heap allocations.
  • Figure 2: Visualized relationships between certain characteristics of executables and their runtime results.