我知道C#给了程序员在不安全的上下文中访问和使用指针的能力。但是什么时候需要这样做呢?
在什么情况下,使用指针是不可避免的?
这仅仅是出于性能原因吗?
另外,为什么C#要通过不安全的上下文公开此功能,并从中移除所有托管优势?从理论上讲,有没有可能在不失去托管环境任何优势的情况下使用指针?
发布于 2011-03-03 02:36:56
指针是托管的、垃圾回收的环境的固有矛盾。
一旦你开始处理原始指针,GC就不知道发生了什么。
具体地说,它不能判断对象是否可达,因为它不知道指针在哪里。
它也不能在内存中移动对象,因为这会破坏你的指针。
所有这些都可以通过GC跟踪的指针来解决;这就是引用。
您应该只在杂乱的高级互操作场景中或在高度复杂的优化中使用指针。
如果你一定要问,你可能不应该问。
发布于 2014-01-28 12:38:51
假设你想使用IPC (共享内存)在两个应用程序之间通信,那么你可以将数据编组到内存中,并通过windows消息传递或其他方式将该数据指针传递给另一个应用程序。在接收应用程序时,您可以取回数据。
在将数据从.NET传输到旧的VB6应用程序的情况下也很有用,在这种情况下,您将数据编组到内存,使用win消息传递指向VB6应用程序的指针,使用VB6 copymemory()从托管内存空间获取数据到VB6应用程序的非托管内存空间。
https://stackoverflow.com/questions/5171781
复制相似问题