社区
C#
帖子详情
csc 的 /unsafe 到底做了什么?
aimeast
2010-04-04 09:52:07
csc 加上 /unsafe 选项就可以使用非安全代码了。
为什么不加这个选项就不可以使用非安全代码?
好像加了 /unsafe 之后,IL代码没有什么变化。
加了这个参数,编译器在生成的二进制文件里到底做了什么?CLR会有什么特殊机制?
是特殊的内存管理,还是别的?还是什么都没做?
请高手来解答!
...全文
157
5
打赏
收藏
csc 的 /unsafe 到底做了什么?
csc 加上 /unsafe 选项就可以使用非安全代码了。 为什么不加这个选项就不可以使用非安全代码? 好像加了 /unsafe 之后,IL代码没有什么变化。 加了这个参数,编译器在生成的二进制文件里到底做了什么?CLR会有什么特殊机制? 是特殊的内存管理,还是别的?还是什么都没做? 请高手来解答!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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 编译器选项。无法通过公共语言运行库验证不安全代码。
编译器选项全解-
CSC
.exe/?
C#编译器选项全解 可以使用
CSC
.exe/?来查看可选项.
csc
命令帮助
csc
命令帮助 大家还是要常用用
csc
,个人感觉有时vs有不少不太方便的东西。
csc
选项命令列表
C#中关于
CSC
命令选项的说明
MessageBox3.cs
//
UnSafe
Swap.cs // 不安全代码示例 // 编译命令:
csc
/
unsafe
UnSafe
Swap.cs using System; class Program { public static void Main() { int a = 2; int b = 9; Console.WriteLine("交换前:a = {0}, b = {1}", a, b); // 不安全语句
unsafe
{ Swap(&a, &b); // 使用了获取变量地址的指针运算符& } Console.WriteLine("交换后:a = {0}, b = {1}", a, b); } // 声明不安全方法 static
unsafe
void Swap(int* a, int* b) { int tmp = *a; *a = *b; *b = tmp; } }
RunUO-2.4:RunUO 2.4源代码
汝uo RunUO Git存储库 典型的Windows构建 PS C:\ runuo> C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \
csc
/ optimize /
unsafe
/ t:exe /out:RunUO.exe / d:Framework_4_0 /win32icon:Server\runuo.ico / recurse :服务器\ *。cs 典型Linux构建(MONO) 〜/ runuo $ gmcs -optimize +-不安全-t:exe -out:RunUO.exe -win32icon:Server / runuo.ico -d:MONO -recurse:Server / *。cs
C#
111,097
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章