C: Возвращаемое значение через вопрос стека / регистра

Я новичок в C, и есть одна вещь, которую я не могу понять. Когда функция возвращает что-то не больше регистра - мой компилятор помещает это в EAX. Когда я возвращаю большую структуру (не указатель, а саму структуру) - она ​​возвращается через стек.

Мой вопрос: как компилятор знает, как вызвать функцию, экспортированную другим объектом? Существует соглашение о вызовах (например, stdcall), но оно касается передачи аргументов, а не чтения возвращаемого значения, верно?

Должно быть какое-то правило вроде «Если возвращаемое значение объявлено больше, чем EAX, то брать его из [ bp -...] ".

И еще одно: будет ли правильно сказать, что объекты, которые я хочу вернуть, размером больше регистра должны храниться в куче и возвращаться указателем, чтобы предотвратить все, кроме манипуляций со стеком?

Спасибо.

15
задан Jon 20 March 2011 в 01:23
поделиться