Показать сообщение отдельно
Старый 22.08.2016, 21:16   #12
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Decompiled Unity5.3 (c#)

Сообщение от h1dd3n Посмотреть сообщение
Добавлю
var vector = new Vector2(0, 0);
000007FF001735A4  xor         eax,eax  
000007FF001735A6  mov         qword ptr [rsp+20h],rax
Без инлайнинга ([MethodImpl(MethodImplOptions.NoInlining)]):
var vector = Vector2.Zero;
000007FF0019348E  call        000007FF0005C940  
000007FF00193493  mov         qword ptr [rsp+28h],rax
Здесь в rax - вся структура (8 байт). Код был бы немного другим если бы структура не влезала в регистр целиком:
Это код геттера для Vector3

000007FE7F9D4670  vxorps      xmm0,xmm0,xmm0  
000007FE7F9D4675  vxorps      xmm1,xmm1,xmm1  
000007FE7F9D467A  vmovss      dword ptr [rcx],xmm0  
000007FE7F9D467F  vmovss      dword ptr [rcx+4],xmm1  
000007FE7F9D4685  vmovss      dword ptr [rcx+8],xmm1  

Видно что он сразу пишет значения в структуру указатель на которую лежит в rcx, а вызывающая функция заботливо положила туда указатель на локальную переменную.
Структура более не возвращается в регистре.

С инлайнигом:
000007FF001837C4  xor         eax,eax  
000007FF001837C6  mov         qword ptr [rsp+20h],rax
Т.к. Vector2 небольшая структура (два флоата - 8 байт), то вся структура помещается в rax. Видно что код не отличается от 1 примера вообще никак.
Раскидал, что не подкопаться
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием