Ho compilato il seguente codice su MSVC 2013 x64, build di rilascio con/02:Perché MSVC utilizza lo stack inutilmente quando si restituisce una piccola struttura in un registro?
struct Point
{
int x;
int y;
};
Point xUnit()
{
Point p;
p.x = 1;
p.y = 0;
return p;
}
Il codice assembly generato per xUnit()
è:
mov QWORD PTR p$[rsp], 1
mov rax, QWORD PTR p$[rsp]
ret 0
Perché scrivi alla pila e poi leggere immediatamente in rax
per tornare?
mi sarei aspettato:
mov rax, 1
ret 0
Quello che ti aspettavi è essenzialmente ciò che [Clang] (http://goo.gl/VvQPyO) e [GCC] (http://goo.gl/RN7Kmx) generano entrambi su gcc.godbolt.org. – Columbo
Wow, questo è uno * estremamente * strumento utile che non conoscevo. Grazie! – japreiss
Questa funzione sarà sempre in linea. Guardare il codice non ottimizzato non è utile. –