Зависит ли ограничение фрейма стека вызовов от вашей оперативной памяти или языка?

#javascript #python #c #callstack

#javascript #python #c #callstack

Вопрос:

Я пишу статью о концепции стека вызовов и хочу коснуться ограничений стека вызовов на разных языках.

Я знаю, что есть способы узнать, сколько фреймов может быть в стеке вызовов, например:

Python

 import sys
print(sys.getrecursionlimit())
  

Javascript

  let count = 0;
 const counter() {
     count  ;
     counter();
 }
 
counter();
  

Я также хотел бы знать то же самое для C. Но мой главный вопрос заключается в том, является ли это число числом, установленным языком, или это число полностью зависит от объема оперативной памяти устройства.

Комментарии:

1. Обычно это не является аспектом языка программирования. Вы имеете в виду языковую реализацию? Я бы подумал, что это решение должно быть принято, поэтому оно должно быть принято теми, кто пишет реализацию, но тогда оно также будет ограничено доступными ресурсами на компьютере.

Ответ №1:

Это зависит от многих факторов, таких как операционная система, устройство и объем оперативной памяти. Во многих скомпилированных языках операционная система позволяет вам увеличивать стек до тех пор, пока ОС не решит, что больше не хочет вам его предоставлять. Во многих встроенных устройствах хакеры намеренно увеличивают стек за пределы ожидаемых пределов, чтобы проникнуть в устройство.