Issue 129808
Summary Increased memory consumption in ParentMapContext after clang-19
Labels new issue
Assignees
Reporter michael-jabbour-sonarsource
    The memory increase can be observed when enabling any check that uses `ASTContext::getParents` in `clang-tidy`. By plotting the memory consumption when analyzing a sample file, I got the following chart which shows around 10x increase in memory consumption in clang-tidy-19 compared to clang-tidy-18 when the number of elements in the array is large enough:

![Image](https://github.com/user-attachments/assets/ef531e57-289a-4b27-a04a-f63d7bbd7ae1)

Here is a script that generates the above plot:

```python
import matplotlib.pyplot as plt
import subprocess

def generate_cpp_file(file_name, num_elements):
  elements = [100] * num_elements
  elements_str = ', '.join(map(hex, elements))
  with open(file_name, 'w') as f:
    f.write(f"""
            const char large_array[] = {{
              {elements_str}
            }};
 """)


def measure_memory_consumption_with(clang_tidy_bin, num_elements):
  file_name = f'file_{num_elements}.cpp'
 generate_cpp_file(file_name, num_elements)
  process = subprocess.run(['/usr/bin/time', '-f', '%M', clang_tidy_bin, '-checks=readability-magic-numbers', file_name, '--', '-std=c++17'], check=True, capture_output=True)
  memory_kb = int(process.stderr)
  return memory_kb // 1024


def plot_memory_consumption():
  num_elements = [10 ** 1, 10 ** 2, 10 ** 3, 10 ** 4, 10 ** 5, 10 ** 6, 3 * 10 ** 6, 5 * 10 ** 6, 8 * 10 ** 6]

  memory_consumption_17 = [measure_memory_consumption_with('clang-tidy-17', n) for n in num_elements]
 memory_consumption_18 = [measure_memory_consumption_with('clang-tidy-18', n) for n in num_elements]
  memory_consumption_19 = [measure_memory_consumption_with('clang-tidy-19', n) for n in num_elements]
 plt.plot(num_elements, memory_consumption_17, label='clang-tidy-17')
 plt.plot(num_elements, memory_consumption_18, label='clang-tidy-18')
 plt.plot(num_elements, memory_consumption_19, label='clang-tidy-19')
 plt.xlabel('Number of elements')
  plt.ylabel('Memory consumption (MB)')
 plt.legend()
  plt.show()


if __name__ == '__main__':
 plot_memory_consumption()
```
I have installed `clang-tidy` binaries in this test from apt.llvm.org on an Ubuntu machine.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to