Using C# Pointers

后端 未结 3 728
死守一世寂寞
死守一世寂寞 2021-01-11 17:24

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

相关标签:
3条回答
  • 2021-01-11 18:04

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

    0 讨论(0)
  • 2021-01-11 18:14

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

    0 讨论(0)
  • 2021-01-11 18:17

    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.

    0 讨论(0)
提交回复
热议问题