C#中的不安全代码
在C#中,不安全代码有哪些限制? 例如,我可以像使用C或C ++一样进行几乎任意的指针转换和算术运算吗?
是。 当不安全的时候, 所有的赌注都会被取消 。
这是“不安全”背后的想法 – 可以删除可validation类型的“安全性”,并且你可以从一种类型的指针转换为另一种类型的指针,而不会让运行时阻止你自己在脚下射击 ,如果你所以渴望 – 很像C或C ++。
这是在C#中使用不同指针类型的示例:
fixed (Byte* dstBytes = ¤tImage[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)的地址。