Thanks for the replies. I have a related question. For a new piece of memory allocated by GC, can I always assume that its content is zero?
-Yuan >Rotor always uses JIT_NewFast to allocate objects. There is a mechanism >to allow for use of highly tuned per platforms allocators via use of >getNewHelper(...), but it is not used in Rotor for portability reasons. > >Here is x86 dissasembly for the following IL: > >IL_0000: newobj instance void MainApp::.ctor() >IL_0005: stloc.0 > >03457bb1 b8b844d700 mov eax,0xd744b8 // MT for MainApp >03457bb6 50 push eax >03457bb7 b83a4c9500 mov eax,0x954c3a // Address of >JIT_NewFast >03457bbc ffd0 call eax >03457bbe 83c404 add esp,0x4 > >03457bc1 8bf0 mov esi,eax // Save the pointer to >the >03457bc3 8bc8 mov ecx,eax // blank object in esi >03457bc5 51 push ecx >03457bc6 b8fc44d700 mov eax,0xd744fc >03457bcb ff10 call dword ptr [eax]// Call the constructor >03457bcd 83c404 add esp,0x4 >03457bd0 8bc6 mov eax,esi // Get the object ref >from >03457bd2 be00000000 mov esi,0x0 // esi and store it in >a >03457bd7 8945f0 mov [ebp-0x10],eax // local > >(Note esi is set to NULL because it is in the root set for the GC) > >The code paths for allocating valuetypes and arrays are different. Let >me know which one you are interested in. > >Thanks, > >Vladimir > >This posting is provided "AS IS" with no warranties, and confers no >rights. > >-----Original Message----- >From: Discussion of the Rotor Shared Source CLI implementation >[mailto:[EMAIL PROTECTED] On Behalf Of Yuan Yu >Sent: Friday, August 01, 2003 6:12 PM >To: [EMAIL PROTECTED] >Subject: [DOTNET-ROTOR] How does FJit::compileCEE_NEWOBJ work? > >I have been trying to understand how the newobj instruction is jitted. >For >a simple class like > > class Foo { int x = 5; } > >and an instruction > > newobj instance void Foo > >Rotor calls FJit::compileCEE_NEWOBJ, and goes to the "allocate normal >object" case where the first line is > > helper_ftn = jitInfo->getHelperFtn(jitInfo->getNewHelper(targetClass, >methodHandle)); > >The value of jitInfo->getNewHelper(targetClass, methodHandle) appears to >be CORINFO_HELP_NEWSFAST, and, according to the table hlpFuncTable, it >seems to map to JIT_NewFast. So, I thought the helper function >helper_ftn >must have been JIT_NewFast. However, it does not seem to be the case. >So, >what is the value of helper_ftn? > >Thanks, >-Yuan
