Зачем нужен "shadow space" при использовании "fastcall"?

Если суть "fastcall" заключается в передаче первых параметров через регистры, не обращаясь к стеку - для оптимизации работы CPU. Тогда я не вижу смысла в "shadow space", если он все равно запишет параметры в стек - ради работающих точек останова. Я новичок и для моего понимания оба описанных метода взаимо-ирациональны.

Почему процессоры все равно используют fastcall одновременно с shadow space? Не проще ли исключить их обоих?


Ответы (1 шт):

Автор решения: Вадим Александру

В зависимости от соглашения о fastcall в регистр записывается первые n параметров, тем не менее их пространство в стеке зарезервировано. Вызывающий не может записать ничего в shadow space, но оно доступно для вызываемого, к примеру, если ему нужно сохранить параметры для вызова другой функции

→ Ссылка