Различается ли стек вызовов программы в зависимости от ОС и / или языка программирования? - PullRequest
0 голосов
/ 28 октября 2019

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

Ответы [ 2 ]

1 голос
/ 29 октября 2019

Предпочтительный стек вызовов на уровне ЦП зависит от архитектуры. Исторически, у CPU были инструкции, поддерживающие стеки, которые растут до более низких или более высоких адресов памяти, и содержимое стеков менялось в зависимости от архитектуры и языка программирования.

Язык программирования, который компилируется в машинный кодвероятно, будет использовать поддерживаемый процессором стек вызовов. Но любой язык программирования может выбирать, какой стек использовать, как его использовать, что размещать там, и даже какой контекст отвечает за извлечение из стека ( «соглашение о вызовах» ).

Статья в Википедии для "Стек вызовов" объясняет, что содержится в большинстве стеков вызовов и как они используются.

Операционные системы будут адаптироваться к архитектуре ЦП - язык программирования, на котором они написаны (C распространен, но были и другие). Части ОС, написанные на ассемблере, вероятно, будут использовать соглашения архитектуры.

0 голосов
/ 31 октября 2019

Содержимое стека вызовов может отличаться от языка к языку. Например, некоторые языки помещают параметры в порядке справа налево, а другие - в порядке справа налево. Некоторые зависят от вызывающего, чтобы очистить стек при возврате, а другие зависят от вызывающего, чтобы сделать это.

Рассмотрим, например, различные x86 соглашения о вызовах .

...