> This seems like a big waste of time Arlie, are you concerned more about the time (ie, the memcpy operation) or excess growth of the stack (eg, in recursive scenarios)? Or both?
I don't have the managed dx sdk handy -- is their Matrix really a valuetype? In System.Drawing.Drawing2D, it's a class. Somewhat ironic, considering that one's only 2x3 floats. :/ I'd be shocked to learn that the JIT we have today gives special treatment to large valuetypes -- it'd be a pretty obscure opt, if not for the DirectX calls you cite. But I agree it sounds like it would be feasible. (Especially in scenarios where the JIT also decides to inline the function in question -- wouldn't even need to pass a pointer, on x86 -- just emit opcodes which read the fields from somewhere above the ebp, instead of below it.) Cheers, -Shawn http://www.windojitsu.com/ -----Original Message----- From: Arlie Davis [mailto:[EMAIL PROTECTED] Sent: Sunday, May 16, 2004 11:51 Subject: Large structures I have a few questions for the advanced CLR people here. I haven't been able to find any satisfactory answers elsewhere. Consider value types / structures in CLR, and passing them as arguments to methods. Does the MS CLR *always* copy the entire structure onto the stack? Or does it ever simply pass a pointer to the structure? I like value types. However, structures of any significant size are just impractical, if they must always be copied. For example, in managed DirectX, nearly all of the matrix manipulation methods take "Matrix foo" as an argument, never "ref Matrix foo". These matrices are 4x4 floats, which means that 64 bytes must be copied for every single matrix that is passed into a method. This seems like a big waste of time, compared to the same thing in C++, where you would simply always pass a pointer to the matrix. Does the CLR actually pass an entire Matrix on the stack? Or just a pointer? It seems like it would be within the specification / requirements of the CLR to allow a CLR implementation to do this, if it realizes that the method never alters the structure, only examines its fields. Any insight is appreciated. -- arlie =================================== This list is hosted by DevelopMentor. http://www.develop.com Some .NET courses you may be interested in: NEW! Guerrilla ASP.NET, 17 May 2004, in Los Angeles 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 Some .NET courses you may be interested in: NEW! Guerrilla ASP.NET, 17 May 2004, in Los Angeles http://www.develop.com/courses/gaspdotnetls View archives and manage your subscription(s) at http://discuss.develop.com