Ali Tarhini
Ali Tarhini

Reputation: 5358

Using C# Pointers

How does c# makes use of pointers? If C# is a managed language and the garbage collector does a good job at preventing memory leaks and freeing up memory properly, then what is the effect of using pointers in c# and how "unsafe" are they?

Upvotes: 11

Views: 4420

Answers (3)

thecoop
thecoop

Reputation: 46098

To use pointers you have to allow unsafe code, and mark the methods using pointers as unsafe. You then have to fix any pointers in memory to make sure the garbage collector doesn't move them:

byte[] buffer = new byte[256];

// fixed ensures the buffer won't be moved and so make your pointers invalid
fixed (byte* ptrBuf = buffer) {
    // ...
}

It is unsafe because, theoretically, you could take a pointer, walk the entire address space, and corrupt or change the internal CLR data structures to, say, change a method implementation. You can't do that in managed code.

Upvotes: 6

Justin Niessner
Justin Niessner

Reputation: 245399

When using pointers in C# (inside unsafe code blocks), the memory is not managed by the Framework. You are responsible for managing your own memory and cleaning up after yourself.

...therefore, I would consider if fairly "unsafe".

Upvotes: 4

Randy Minder
Randy Minder

Reputation: 48402

C# supports pointers in a limited way. In C# pointer can only be declared to hold the memory address of value types and arrays. Unlike reference types, pointer types are not tracked by the default garbage collection mechanism. Pointers are also not allowed to point to a reference type or even to a structure type which contains a reference type. So, in pure C#, they have rather limited uses. If used in 'unsafe' code, they would be considered pretty unsafe (of course!).

Upvotes: 2

Related Questions