ich den folgenden Code auf MSVC 2013 x64 kompiliert, Veröffentlichung mit/02 bauen:Warum verwendet MSVC den Stapel unnötig, wenn eine kleine Struktur in einem Register zurückgegeben wird?
struct Point
{
int x;
int y;
};
Point xUnit()
{
Point p;
p.x = 1;
p.y = 0;
return p;
}
Die für Assembler-Code generiert xUnit()
ist:
mov QWORD PTR p$[rsp], 1
mov rax, QWORD PTR p$[rsp]
ret 0
Warum auf den Stapel ist es zu schreiben und dann sofort zurück in rax
lesen, um zurückzukehren?
ich erwartet hätte:
mov rax, 1
ret 0
Was Sie erwartet ist im Wesentlichen, was [Clang] (http://goo.gl/VvQPyO) und [GCC] (http://goo.gl/RN7Kmx) beide auf gcc.godbolt.org generieren. – Columbo
Wow, das ist ein * extrem * nützliches Werkzeug, von dem ich nichts wusste. Vielen Dank! – japreiss
Diese Funktion ist immer inline. Ein Blick auf nicht optimierten Code ist nicht sinnvoll. –