C中的不安全代码#
答
是的。当不安全时,All bets are off。
这是“不安全”背后的想法 - 即可验证类型的“安全性”已被移除,并且您可以从一种类型的指针转换为另一种类型的指针,而无需运行时将运行时从shooting yourself in the foot中删除所以愿望 - 很像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个字节工作时间。
答
是的,你可以在任何你喜欢的地方制作一个指针点。
但是,由于程序在虚拟地址空间中运行,因此只能访问该空间中实际存在的内存,即无法访问任何其他进程,并且无法访问未访问的内存“已被分配。
答
您可以了解更多信息请参考以下页面:
http://msdn.microsoft.com/en-us/library/y31yhkeb.aspx
不安全的代码提供了对几乎所有的原始变量声明指针(基本类型)的能力;您可以在指针类型之间进行投射。指针运算基于指针类型的存储大小,因此对指针应用后增量或后减量将通过sizeof(type)增加地址。
答
是的,这都是可能的。这里是MSDN的Unsafe Code Tutorial。
对于所有这些说如何使用这是一个可怕的想法:是的,但它是有原因的。我不得不使用这个(第一次),通过第三方API获取网络摄像头数据,返回Byte *
。
+1对于链接,(和一个很好的答案)。 – Sam 2013-06-04 14:00:02