C# 中不安全代码有哪些限制?例如,我可以像使用 C 或 C++ 一样进行几乎任意的指针转换和算术吗?
搬起石头砸自己的脚 ,如果你愿意的话 - 就像 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 个字节。
不安全代码教程。
对于所有说使用这是一个可怕的想法的人:是的,但它的存在是有原因的。最近我不得不使用这个(第一次),通过返回Byte *
的第三方 API 获取网络摄像头数据。
但是,由于您的程序运行在虚拟地址空间中,因此您只能访问该空间中实际存在的内存,即您无法访问任何其他进程,也无法访问尚未分配的内存.