C#中的不安全代码

13

在 C# 中,不安全代码的限制是什么?例如,我能否像使用 C 或 C++ 一样进行几乎任意的指针转换和算术操作?

4个回答

13

是的。当存在不安全因素时,一切皆有可能

"不安全"的概念就在于去除了可验证类型的“安全性”,如果你愿意,你可以将一个指针从一种类型转换为另一种类型,而运行时不会阻止你自我毁灭, 就像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个字节。

4
是的,这些都是可能的。这里是来自MSDN的Unsafe Code Tutorial链接:http://msdn.microsoft.com/en-us/library/aa288474(v=VS.71).aspx
对于那些认为使用这个方法很糟糕的人,请注意:它是有原因的。我最近第一次使用了这个方法,通过第三方API获取了Webcam数据并返回Byte *类型的数据。

1

是的,你可以让指针指向任何你想要的地方。

然而,由于你的程序运行在虚拟地址空间中,你只能访问实际存在于该空间中的内存,也就是说你不能访问其他进程的内存,也不能访问未被分配的内存。


0
您可以查阅以下页面获取更多信息:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接