csc 的 /unsafe 到底做了什么?

aimeast 2010-04-04 09:52:07
csc 加上 /unsafe 选项就可以使用非安全代码了。
为什么不加这个选项就不可以使用非安全代码?
好像加了 /unsafe 之后,IL代码没有什么变化。
加了这个参数,编译器在生成的二进制文件里到底做了什么?CLR会有什么特殊机制?
是特殊的内存管理,还是别的?还是什么都没做?

请高手来解答!
...全文
150 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
段传涛 2010-04-05
  • 打赏
  • 举报
回复
请问这些“允许”和“不允许”是对于编译器的,还是对于CLR的?
--------clr的 找个代码测试就出来了
---------弄明白这个东西 ,还要了解一下GC
aimeast 2010-04-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]

默认情况下, C#编译器产生的代码都是安全的
采用非安全模式编译文件
非安全代码允许直接操作内存地址以及这些地址上的字节。
使用不安全代码将引起安全风险和稳定性风险。
[/Quote]请问这些“允许”和“不允许”是对于编译器的,还是对于CLR的?
wuyq11 2010-04-04
  • 打赏
  • 举报
回复
默认情况下, C#编译器产生的代码都是安全的
采用非安全模式编译文件
非安全代码允许直接操作内存地址以及这些地址上的字节。
使用不安全代码将引起安全风险和稳定性风险。

ChrisAK 2010-04-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 aimeast 的回复:]
引用 1 楼 wuyq11 的回复:

默认情况下, C#编译器产生的代码都是安全的
采用非安全模式编译文件
非安全代码允许直接操作内存地址以及这些地址上的字节。
使用不安全代码将引起安全风险和稳定性风险。
请问这些“允许”和“不允许”是对于编译器的,还是对于CLR的?
[/Quote]编译器.
其实看下生成的IL代码ref和out也是用了指针的.
不过那是处于编译器控制下的指针使用,所以是"safe"的.
xingyuebuyu 2010-04-04
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/t2yzs44b(v=VS.80).aspx

在公共语言运行库 (CLR) 中,不安全代码是指无法验证的代码。C# 中的不安全代码不一定是危险的,只是其安全性无法由 CLR 进行验证的代码。因此,CLR 只对在完全受信任的程序集中的不安全代码执行操作。如果使用不安全代码,由您负责确保您的代码不会引起安全风险或指针错误。

http://msdn.microsoft.com/zh-cn/library/chfa2zb8(VS.80).aspx
若要编译不安全代码,必须指定 /unsafe 编译器选项。无法通过公共语言运行库验证不安全代码。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧