我在C#代码中使用了特定的命令,效果很好。但是,据说在“非托管”代码中行为不当。什么是托管或非托管代码?
3 回答
慕村9548890
TA贡献1884条经验 获得超4个赞
当您想到非托管时,请考虑机器专用的机器级代码。类似于x86汇编语言。非托管(本机)代码经过编译和链接,可直接在其设计用于的处理器上运行,此刻不包括所有操作系统内容。它不是便携式的,但速度很快。非常简单,精简的代码。
托管代码包括从Java到旧的Interpretive BASIC的所有内容,或在.NET下运行的所有内容。通常将托管代码编译为中间级别的P代码或字节代码指令集。尽管它们看起来类似于汇编语言,但它们不是特定于机器的指令。托管代码将程序与运行它的计算机隔离开来,并创建一个安全边界,在该边界中间接分配所有内存,通常来说,您无法直接访问机器资源,例如端口,内存地址空间,堆栈等。这个想法是在更安全的环境中运行。
要从托管变量转换为非托管变量,您必须先到达实际对象本身。它可能被包裹或装在其他包装中。在32位计算机上,非托管变量(例如“ int”)仅占用4个字节。没有开销或其他包装。从托管代码变为非托管代码,然后再返回的过程称为“ 封送处理 ”。它允许您的程序越过边界。
- 3 回答
- 0 关注
- 614 浏览
添加回答
举报
0/150
提交
取消