C# 中的不安全代码

问题描述 投票:0回答:4

C# 中不安全代码有哪些限制?例如,我可以像使用 C 或 C++ 一样进行几乎任意的指针转换和算术吗?

c# unsafe
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 的

不安全代码教程

对于所有说使用这是一个可怕的想法的人:是的,但它的存在是有原因的。最近我不得不使用这个(第一次),通过返回

Byte *

 的第三方 API 获取网络摄像头数据。


1
投票
是的,您可以将指针指向任何您喜欢的地方。

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


0
投票
您可以查阅以下页面了解更多信息:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.