zhouqijie

数组的封送

所有的数组都是引用类型,所以默认情况下,封送拆收器会把托管代码的数组按照In特性封送到非托管函数中。也就是说任何对数组元素的修改都不能返回给调用方,除非指定[In,Out]特性。



封送简单类型数组

如果数组的元素都是blittable类型,那么数组会被Pin在托管内存中,并且指向原数组的指针将会被传递给非托管函数。

因此即使不指定[In,Out]特性,函数对数组进行的任何修改都会反映给调用方。在这种情况下免去了复制过程,提高了性能,但是非托管函数可能意外修改原数组内容。



封送字符串数组

由于string类型不是blittable类型,所以string数组在封送过程中不会被Pin。因此如果希望将非托管函数修改过的字符串返回调用方,就需要指定[In,Out]方向特性。

字符串数组的封送处理方式、内存分配释放机制。类似前面的字符串作为参数、结构体字段的情形大致相同。

(END)