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