Ответ 1
Версия X86, похоже, преуспевает (это сгенерирует "mov eax, 1" ).
Я предполагаю, что версии X86 и X64 являются отдельными базами кода, и оптимизация, найденная в одной цели, необязательно присутствует в другой.
Я скомпилировал следующий код на MSVC 2013, x64, Release build с /02:
struct Point
{
int x;
int y;
};
Point xUnit()
{
Point p;
p.x = 1;
p.y = 0;
return p;
}
Сгенерированный код сборки для xUnit()
:
mov QWORD PTR p$[rsp], 1
mov rax, QWORD PTR p$[rsp]
ret 0
Почему он записывает в стек, а затем сразу же возвращается в rax
для возврата?
Я бы ожидал:
mov rax, 1
ret 0
Версия X86, похоже, преуспевает (это сгенерирует "mov eax, 1" ).
Я предполагаю, что версии X86 и X64 являются отдельными базами кода, и оптимизация, найденная в одной цели, необязательно присутствует в другой.