社区
C#
帖子详情
csc 的 /unsafe 到底做了什么?
aimeast
2010-04-04 09:52:07
csc 加上 /unsafe 选项就可以使用非安全代码了。
为什么不加这个选项就不可以使用非安全代码?
好像加了 /unsafe 之后,IL代码没有什么变化。
加了这个参数,编译器在生成的二进制文件里到底做了什么?CLR会有什么特殊机制?
是特殊的内存管理,还是别的?还是什么都没做?
请高手来解答!
...全文
211
5
打赏
收藏
csc 的 /unsafe 到底做了什么?
csc 加上 /unsafe 选项就可以使用非安全代码了。 为什么不加这个选项就不可以使用非安全代码? 好像加了 /unsafe 之后,IL代码没有什么变化。 加了这个参数,编译器在生成的二进制文件里到底做了什么?CLR会有什么特殊机制? 是特殊的内存管理,还是别的?还是什么都没做? 请高手来解答!
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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 编译器选项。无法通过公共语言运行库验证不安全代码。
不安全代码只会在使用 /
unsafe
编译的情况下出现
本文介绍了一种在项目中启用不安全代码的方法,通过右键点击项目选择属性,在生成选项中勾选允许不安全代码的复选框。此操作适用于需要使用不安全代码的C#等.NET项目。
深入解析 .NET NativeAOT 的 Test.CoreLib:最小可行核心库的设计与使用
Test.CoreLib是.NET NativeAOT体系中专为测试设计的最小可行核心库,仅包含支撑AOT编译与原生链接所需的最基础类型和运行时契约。本文剖析其源码结构(含Runtime.Base就地链接、条件编译)、RuntimeImports/RuntimeExport双向调用机制、静态构造简化实现,并详解
csc
→ILC→原生链接三步构建流程,揭示其作为NativeAOT运行时教学样本的核心价值。
Unity导入HoloToolkit时报错error CS0227
本文介绍了解决HoloLens开发过程中出现的“errorCS0227:
Unsafe
coderequiresthe`
unsafe
’commandlineoptiontobespecified”错误的方法。通过在项目的Assets目录下创建并配置两个文件:“
csc
.rsp”和“smcs.rsp”,可以有效避免此问题。
C#字符串不可变性真相:内存机制、性能陷阱与安全边界
本文深入剖析C#中String不可变性的本质:它是一种运行时语义契约,而非内存物理限制;通过
unsafe
指针可绕过编译期防护修改字符串内容,但会破坏驻留池一致性、线程安全与哈希稳定性。重点对比String与StringBuilder的内存分配机制与性能差异,揭示常量折叠、缓冲区预分配、几何扩容等底层优化策略,并指出Span
和ReadOnlySpan
在现代.NET中的高性能替代价值。
HoloToolkit导入Error CS0227
本文介绍了在使用HoloToolkit进行HoloLens开发时遇到的errorCS0227错误及其解决方法。通过在项目的Assets目录下创建包含-
unsafe
选项的
csc
.rsp和smcs.rsp文件,可以成功避免此错误。
C#
111,128
社区成员
642,533
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章