Я новичок в C, и есть одна вещь, которую я не могу понять. Когда функция возвращает что-то не больше регистра - мой компилятор помещает это в EAX. Когда я возвращаю большую структуру (не указатель, а саму структуру) - она возвращается через стек.
Мой вопрос: как компилятор знает, как вызвать функцию, экспортированную другим объектом? Существует соглашение о вызовах (например, stdcall), но оно касается передачи аргументов, а не чтения возвращаемого значения, верно?
Должно быть какое-то правило вроде «Если возвращаемое значение объявлено больше, чем EAX, то брать его из [ bp -...] ".
И еще одно: будет ли правильно сказать, что объекты, которые я хочу вернуть, размером больше регистра должны храниться в куче и возвращаться указателем, чтобы предотвратить все, кроме манипуляций со стеком?
Спасибо.