C中的不安全代码#

问题描述:

C#中不安全代码的局限性是什么?例如,我可以像使用C或C++一样进行几乎任意的指针转换和算术运算吗?C中的不安全代码#

是的。当不安全时,All bets are off

这是“不安全”背后的想法 - 即可验证类型的“安全性”已被移除,并且您可以从一种类型的指针转​​换为另一种类型的指针,而无需运行时将运行时从shooting yourself in the foot中删除所以愿望 - 很像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个字节工作时间。

+0

+1对于链接,(和一个很好的答案)。 – Sam 2013-06-04 14:00:02

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

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

您可以了解更多信息请参考以下页面:

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

不安全的代码提供了对几乎所有的原始变量声明指针(基本类型)的能力;您可以在指针类型之间进行投射。指针运算基于指针类型的存储大小,因此对指针应用后增量或后减量将通过sizeof(type)增加地址。

是的,这都是可能的。这里是MSDN的Unsafe Code Tutorial

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