Зачем нужен "shadow space" при использовании "fastcall"?
Если суть "fastcall" заключается в передаче первых параметров через регистры, не обращаясь к стеку - для оптимизации работы CPU. Тогда я не вижу смысла в "shadow space", если он все равно запишет параметры в стек - ради работающих точек останова. Я новичок и для моего понимания оба описанных метода взаимо-ирациональны.
Почему процессоры все равно используют fastcall одновременно с shadow space? Не проще ли исключить их обоих?
Ответы (1 шт):
В зависимости от соглашения о fastcall в регистр записывается первые n параметров, тем не менее их пространство в стеке зарезервировано. Вызывающий не может записать ничего в shadow space, но оно доступно для вызываемого, к примеру, если ему нужно сохранить параметры для вызова другой функции