C#中的不安全代码

在C#中,不安全代码有哪些限制? 例如,我可以像使用C或C ++一样进行几乎任意的指针转换和算术运算吗?

是。 当不安全的时候, 所有的赌注都会被取消 。

这是“不安全”背后的想法 – 可以删除可validation类型的“安全性”,并且你可以从一种类型的指针转​​换为另一种类型的指针,而不会让运行时阻止你自己在脚下射击 ,如果你所以渴望 – 很像C或C ++。

这是在C#中使用不同指针类型的示例:

fixed (Byte* dstBytes = &currentImage[0]) { var dstBuffer = (Int64*)dstBytes; const int blockCount = ImageSizeInBytes / sizeof(Int64); for (var j = 0; j < blockCount; j++) { dstBuffer[j] = srcBuffer[j]; } } 

注意数组的类型是Byte[] ,但在我得到一个Byte*我可以将它转换为Int64*并一次使用8个字节。

是的,这一切都是可能的。 这是MSDN的不安全代码教程 。

对于那些说如何使用这个是一个可怕的想法的人:是的,但这是有原因的。 最近我不得不使用它(第一次),通过返回Byte *的第三方API获取网络摄像头数据。

是的,您可以在任何您喜欢的地方制作指针点。

但是,由于您的程序在虚拟地址空间中运行,因此您只能访问该空间中实际存在的内存,即您无法访问任何其他进程,并且无法访问尚未分配的内存。

有关更多信息,请参阅以下页面:

http://msdn.microsoft.com/en-us/library/y31yhkeb.aspx

不安全的代码提供了为几乎任何原始变量(基本类型)声明指针的能力; 你被允许在指针类型之间转换。 指针算法基于指针类型的存储大小,因此将后递增或后递减应用于指针将增加sizeof(type)的地址。