Цитата(GetSmart @ Feb 24 2010, 15:20)
vmp, это то же самое как и передавать указатель на структуру в качестве параметра функции. Код будет 100% одинаковым. Переменнаяя/результат будет располагаться в стеке.
Не факт. Структура по семантике языка возвращается по значению. Как на самом деле реализуется, зависит от платформы, тут надо смотреть доку на конкретную платформу. Например, у Blackfin/VDSP по поводу структур сказано следующее:
Return Values
•For functions returning aggregate values occupying fewer than or
equal to 32 bits, the result is returned in R0.
•For aggregate values occupying greater than 32 bits, and fewer than
or equal to 64 bits, the result is returned in register pair R0, R1.
•For functions returning aggregate values occupying more than 64
bits, the caller allocates the return value object on the stack and the
address of this object is passed to the callee as a hidden argument in
register P0.
И примеры приведены:
Код
---------------------------------------------------------------------------------
Function Prototype | Parameters Passed as | Return Location
---------------------------------------------------------------------------------
struct s2 { | a in R0, | in R0 (s.t and s.u)
char t; | b in R1, | and in R1 (s.v)
char u; | c in R2 |
int v; | |
} | |
| |
struct s2 test(int a, | |
int b, int c) | |
---------------------------------------------------------------------------------
struct s3 { | a in R0, | in *P0 (based on value
char t; | b in R1, | of P0 at the call, not
char u; | c in R2 | necessarily at the
int v; | | return)
int w; | |
} | |
| |
struct s3 test(int a, | |
int b, int c) | |
---------------------------------------------------------------------------------
Цитата(GetSmart @ Feb 24 2010, 15:20)
Но т.к. современные компиляторы (сами) стараются располагать переменные в регистрах, то вместо этого устаревшего варианта возврата результата через стек пора бы уже вводить возврат результата (множественного) через регистры. Раньше было рано, а теперь в самый раз
Это всегда было и было отдано на откуп реализации. А если структура не лезет в регистры, то тут никакие новые правила языка не помогут - все равно будет передавать через память.