Измерение использования стека для многопоточного приложения Linux

Я не знаю хороших инструментов, но multithread в крайнем случае вы можете multi-threaded включить в свое приложение threads какой-нибудь код для проверки, примерно linux такой:

__thread void* stack_start;
__thread long stack_max_size = 0L;

void check_stack_size() {
  // address of 'nowhere' approximates end of stack
  char nowhere;
  void* stack_end = (void*)&nowhere;
  // may want to double check stack grows downward on your platform
  long stack_size = (long)stack_start - (long)stack_end;
  // update max_stack_size for this thread
  if (stack_size > stack_max_size)
    stack_max_size = stack_size;
}

Функцию check_stack_size() придется stacks вызывать в некоторых функциях, которые linux наиболее глубоко вложены.

Затем threading в качестве последнего оператора stacks в потоке вы можете вывести stacks stack_max_size куда-нибудь.

Переменная cross-threading stack_start должна быть инициализирована threading в начале вашего потока:

void thread_proc() {
  char nowhere;
  stack_start = (void*)&nowhere;
  // do stuff including calls to check_stack_size()
  // in deeply nested functions
  // output stack_max_size here
}

linux

multithreading

stack

2022-07-22T13:36:02+00:00