Hi, actually i stepped through the code and put breaks at JIT_New.. calls, printfs in compileCEE_NEWOBJ function. referringto the disassembled code below, i get a call to compileCEE_NEWOBJ just before ldstr stmt(marked by an arrow). and that is followed by a series of calls to SlowAllocateString(..) corresponding to ldstr. this i got by the way you (Jan) had explained the other day by call SOS("IP2MD.."). after this the next stop happens at the Alloc call of size 236 which i found to be the Random object constructor. so when and how is the Test constructor executed? it surely is not calling GCHeap::Alloc(), so the only left option is emitCore, and that what i am not able to figure out how? pls help.
.method public hidebysig static int32 Main() cil managed { .entrypoint // Code size 22 (0x16) .maxstack 1 .locals init (class DefaultNamespace.Test V_0, int32 V_1) ----> IL_0000: ldstr "first stmt" IL_0005: call void [mscorlib]System.Console::WriteLine(string) IL_000a: newobj instance void DefaultNamespace.Test::.ctor() IL_000f: stloc.0 IL_0010: ldc.i4.0 IL_0011: stloc.1 IL_0012: br.s IL_0014 IL_0014: ldloc.1 IL_0015: ret } // end of method mainclass::Main On Sat, 10 Jul 2004, Jan Kotas wrote: > compileCEE_NEWOBJ is hit for both allocations points for me. Are you > setting your breakpoints before Main is jitted? > > -Jan > > -----Original Message----- > From: Discussion of the Rotor Shared Source CLI implementation > [mailto:[EMAIL PROTECTED] On Behalf Of Archana > Sent: Saturday, July 10, 2004 5:31 AM > To: [EMAIL PROTECTED] > Subject: [DOTNET-ROTOR] How does the jit handle an alloc-stmt? > > Hi, > wrt the following test program, i am trying to find out how exactly the > jit manages alloc-stmts, > > namespace DefaultNamespace { > using System; > public class Test { > int x; > public Test() { > 1-> Random r=new Random(1234); > } > } > public class mainclass { > public static int Main() { > Console.WriteLine("first stmt"); > 2-> Test t=new Test(); > return 0; > } > > referring to allocation point 1, a call to compileCEE_NEWOBJ is made, > which ultimately calls JIT_NewArr1 that can be captured by a break. but > wrt alloc point 2, no such call is > made. but if we disassemble the code, both the allocations have > corresponding newobj opcodes- > IL_000b: newobj instance void [mscorlib]System.Random::.ctor(int32) > and > IL_000a: newobj instance void DefaultNamespace.Test::.ctor() > respectively. > could someone pls explain what happens to the second alloc call, how is > it > handled? is it handled thru emitCore(..)? if yes, how does the control > flow to that function, and can we track it somehow? > > Thanks & regards > archana > > =================================== > This list is hosted by DevelopMentor(r) http://www.develop.com > ASP.NET courses you may be interested in: > > Guerrilla ASP.NET > 15 March 2004, in Boston, MA > 17 May 2004 in Torrance, CA > 7 June 2004, London, UK > > http://www.develop.com/courses/gaspdotnetls > > View archives and manage your subscription(s) at > http://discuss.develop.com > > =================================== > This list is hosted by DevelopMentorŪ http://www.develop.com > ASP.NET courses you may be interested in: > > Guerrilla ASP.NET > 15 March 2004, in Boston, MA > 17 May 2004 in Torrance, CA > 7 June 2004, London, UK > > http://www.develop.com/courses/gaspdotnetls > > View archives and manage your subscription(s) at http://discuss.develop.com > -- Regards, Archana =================================== This list is hosted by DevelopMentorŪ http://www.develop.com ASP.NET courses you may be interested in: Guerrilla ASP.NET 15 March 2004, in Boston, MA 17 May 2004 in Torrance, CA 7 June 2004, London, UK http://www.develop.com/courses/gaspdotnetls View archives and manage your subscription(s) at http://discuss.develop.com