Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using C# Pointers

Tags:

c#

.net

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?

like image 566
Ali Tarhini Avatar asked Nov 30 '10 17:11

Ali Tarhini


3 Answers

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.

like image 198
thecoop Avatar answered Sep 22 '22 23:09

thecoop


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".

like image 30
Justin Niessner Avatar answered Sep 20 '22 23:09

Justin Niessner


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!).

like image 24
Randy Minder Avatar answered Sep 21 '22 23:09

Randy Minder