in continuation with this,
is there any way of taking the address of a managed type,
like for example when i tried to compile similar code:

class testobj {
 public int y;
}

class Foo {
 public testobj x;
}

unsafe class test {
 public static void Main()
 {
  Foo foo=Foo();
  fixed(testobj* f=&foo.x) {
  ...

  }


 }


}

i got a compiler error "cannot take address of a managed type"
for the line having the fixed stmt (both on windows and Free BSD, rotor
Beta version)
am i missing something here?

thanks,
archana


On Tue, 3 Jun 2003, Jan Kotas wrote:

> Only variable z is marked as pinned. It is easy to see if you look at
> generated IL using ildasm.
>
> The pinned pointers will show up as interior pointers during the GC
> scan. For interior pointers, the GC uses bricktable to find the object
> that encapsulates the given memory location and then operates on that.
> If you want to see it in the code, look for GC_CALL_INTERIOR flag and
> what's done differently when it is set.
>
> So to answer your question, when a field in the object is pinned the
> whole object will be pinned. This will happen inside the GC through
> interior pointers. There does not have to be pinned variable holding
> reference to the object.
>
> -Jan
>
> 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 Archana
> Sent: Tuesday, January 05, 1999 10:01 AM
> To: [EMAIL PROTECTED]
> Subject: [DOTNET-ROTOR] pinning and fixed blocks
>
> Hi,
>  this is regarding Pinning objects using fixed(..) {}
> If we have a piece of code like
> fixed (obj* z= & objx.field) {
> ...
> }
> How does rotor treat the variables z and obj,
> does it mark both as pinned?
> when it pins objx does it pin just the field or the entire object?
>
> regards
>

Reply via email to