- Mini PC
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- RAM topik
- Videós, mozgóképes topik
- Univerzális megoldás lesz az AMD-féle FSR Redstone?
- AMD Catalyst™ driverek topikja
- SCUF Reflex (2025): Apró változtatás, hatalmas különbség?
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Milyen RAM-ot vegyek?
-
PROHARDVER!
Új hozzászólás Aktív témák
-
pmonitor
aktív tag
válasz
pmonitor #19935 üzenetére
Röviden:
A struct gyakorlatilag azt jelenti, hogy a változót "HELYBEN" hozza létre.
A class azt jelenti, hogy a változót mindig a heap egy szabad területén hozza létre.Van ez a C# kód:
namespace IntOseEAzObject
{
public class Program
{
static void Main(string[] args)
{
int[] lngt = { 10, 20, 30 };
Struktura strct = new Struktura(10, 20, 30, lngt);
long lng = strct.lng;
int lng_2 = strct.lng_2;
int lng_3 = strct.lng_3;
int lng_4 = lngt[0];
int lng_5 = lngt[1];
int lng_6 = lngt[2];
Console.WriteLine("{0} {1} {2} {3} {4} {5}", lng, lng_2, lng_3, lng_4, lng_5, lng_6);
}
}
struct Struktura
{
public int lng;
public int lng_2;
public int lng_3;
public int[] list;
public Struktura(int lng, int lng_2, int lng_3, int[] list)
{
this.lng = lng;
this.lng_2 = lng_2;
this.lng_3 = lng_3;
this.list = list;
}
}
}
Ez assemblyben így mutatkozik meg(csak a releváns részt másolom be ide:int[] lngt = { 10, 20, 30 };
011508A5 mov ecx,63F6639Eh
011508AA mov edx,3
011508AF call CORINFO_HELP_NEWARR_1_VC (0107322Ch)
011508B4 mov dword ptr [ebp-70h],eax
011508B7 mov ecx,1084EF4h
011508BC call 65485DE0 ;ez a metódus adja vissza az eax-ban az lngt[] címét.
011508C1 mov dword ptr [ebp-74h],eax
011508C4 lea eax,[ebp-74h]
011508C7 push dword ptr [eax]
011508C9 mov ecx,dword ptr [ebp-70h]
011508CC call 65485A80
011508D1 mov eax,dword ptr [ebp-70h]
011508D4 mov dword ptr [ebp-40h],eax
Struktura strct = new Struktura(10, 20, 30, lngt);
011508D7 push 14h
011508D9 push 1Eh
011508DB push dword ptr [ebp-40h]
011508DE lea ecx,[ebp-50h]
011508E1 mov edx,0Ah
011508E6 call IntOseEAzObject.Struktura..ctor(Int32, Int32, Int32, Int32[]) (01150450h)
long lng = strct.lng;
011508EB lea eax,[ebp-50h]
011508EE mov eax,dword ptr [eax+4] ;Itt mindig az ebp-hez viszonyított helyzethez határozza meg. strct[0] esetén ebp+4
011508F1 cdq
011508F2 mov dword ptr [ebp-58h],eax
011508F5 mov dword ptr [ebp-54h],edx
int lng_2 = strct.lng_2;
011508F8 lea eax,[ebp-50h]
011508FB mov eax,dword ptr [eax+8] ;strct[1] esetén ebp+8
011508FE mov dword ptr [ebp-5Ch],eax
int lng_3 = strct.lng_3;
01150901 lea eax,[ebp-50h]
01150904 mov eax,dword ptr [eax+0Ch] ;strct[3] esetén ebp+12
01150907 mov dword ptr [ebp-60h],eax
int lng_4 = lngt[0];
0115090A mov eax,dword ptr [ebp-40h]
0115090D cmp dword ptr [eax+4],0
01150911 ja IntOseEAzObject.Program.Main(System.String[])+0D0h (01150918h)
01150913 call 656EFE40 ;referencia típus esetén(lngt[0]) mindig ezt a metódust hívja meg, ami az eax-ban adja vissza a referencia címét, ami a heap-ben van. Előtte nem véletleül ellenőrzi le, hogy érvényes-e a cím.
01150918 mov eax,dword ptr [eax+8]
0115091B mov dword ptr [ebp-64h],eax
int lng_5 = lngt[1];
0115091E mov eax,dword ptr [ebp-40h]
01150921 cmp dword ptr [eax+4],1
01150925 ja IntOseEAzObject.Program.Main(System.String[])+0E4h (0115092Ch)
01150927 call 656EFE40 ;lngt[1] esetén is ugyanazt a metódust hívja meg.
0115092C mov eax,dword ptr [eax+0Ch]
0115092F mov dword ptr [ebp-68h],eax
int lng_6 = lngt[2];
01150932 mov eax,dword ptr [ebp-40h]
01150935 cmp dword ptr [eax+4],2
01150939 ja IntOseEAzObject.Program.Main(System.String[])+0F8h (01150940h)
0115093B call 656EFE40 ;lngt2 esetén is ugyanazt a metódust hívja meg.
01150940 mov eax,dword ptr [eax+10h]
01150943 mov dword ptr [ebp-6Ch],eax
Console.WriteLine("{0} {1} {2} {3} {4} {5}", lng, lng_2, lng_3, lng_4, lng_5, lng_6);
01150946 mov eax,dword ptr ds:[483244Ch]
0115094C mov dword ptr [ebp-78h],eax
0115094F mov ecx,63F664BAh
01150954 mov edx,6A kódba magyarázatot is tettem. Érdemes elgondolkodni rajt. Sztem.
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- Mini PC
- Windows 10
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- RAM topik
- Videós, mozgóképes topik
- New World - az új Amazon MMORPG
- BMW topik
- Univerzális megoldás lesz az AMD-féle FSR Redstone?
- Porszívók - akkus és klasszikus vezetékes
- AMD Catalyst™ driverek topikja
- További aktív témák...
- GYÖNYÖRŰ iPhone 12 Pro Max 256GB Graphite -1 ÉV GARANCIA - Kártyafüggetlen, MS2927, 100% Akkumulátor
- Frederick Forsythe: Isten ökle (nem olvasott)
- LG 77G4 - 77" OLED evo - 4K 144Hz 0.1ms - MLA - 3000 Nits - NVIDIA G-Sync - AMD FreeSync - HDMI 2.1
- Tablet felvásárlás!! Apple iPad, iPad Mini, iPad Air, iPad Pro
- Apple MacBook Pro 13" 2019 256/8GB Akku:40 ciklus! Magyar
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest