C#功能杂集

使用unsafe代码

Unsafe, fixed, stackalloc

由于C#可以使用元数据,验证函数签名、对象类型,保证执行过程的安全,如果要使用指针,则不能进行验证,用unsafe表示。unsafe可以指定类、方法和代码段,可以在unsafe的上下文使用指针,指针只能指向简单的“非托管”值类型,不能指向对象,class等。

如果指针指向堆上的数据,由于GC可能调整堆上的对象以减少碎片,而且GC不会意识到有指针使用的内存,导致GC后指针指向的内存不是想要的数据,可以使用fixed固定这个对象(GC不会移动这个对象),从而保证指针有效,不过要注意,这个指针也不能修改,如果要移动指针访问数据,需要用一个新的指针。

c#里面new数组是在堆上分配内存,无法用取地址得到指针,可以用stackalloc把数组分配在栈上。

互操作interoperability

 https://msdn.microsoft.com/en-us/library/ms173184.aspx

  1. C#调用COM。一个很不错的例子COM Interop Part 1: C# Client Tutorial
  2. COM调用C#。COM Interop Part 2: C# Server Tutorial
  3. C#调用非托管模块。
posted on 2016-08-19 17:36  ShaunLing  阅读(145)  评论(0编辑  收藏  举报