使用C#指针

c#如何利用指针? 如果C#是托管语言并且垃圾收集器在防止内存泄漏和正确释放内存方面做得很好,那么在c#中使用指针会有什么影响以及它们的“ 不安全 ”是什么?

要使用指针,您必须允许不安全的代码,并使用指针将方法标记为unsafe 。 然后,您必须修复内存中的任何指针,以确保垃圾收集器不会移动它们:

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

这是不安全的,因为从理论上讲,您可以获取指针,遍历整个地址空间,并破坏或更改内部CLR数据结构,例如,更改方法实现。 您无法在托管代码中执行此操作。

在C#中使用指针(在不安全的代码块内)时,内存不受Framework管理。 您有责任管理自己的记忆并自行清理。

…因此,我会考虑是否相当“不安全”。

C#以有限的方式支持指针。 在C#指针中只能声明保存值类型和数组的内存地址。 与引用类型不同,默认的垃圾收集机制不会跟踪指针类型。 指针也不允许指向引用类型,甚至不允许指向包含引用类型的结构类型。 因此,在纯C#中,它们的用途相当有限。 如果在“不安全”代码中使用,它们将被认为是非常不安全的(当然!)。