我在我的C#代码中使用了一个特定的命令,该代码运行良好.但是,据说在"非托管"代码中行为不端.
什么是托管代码或非托管代码?
我对.NET语言环境中的机器代码和本机代码感到困惑.
他们之间有什么区别?它们是一样的吗?
我想知道像ccleaner和utorrent这样的程序是如何制作的?AFAIK它们是用C++编写的,但是它们运行时不需要.net框架,并且显然也可以在Windows 98上运行.如何才能做到这一点?Visual c ++需要安装.net框架才能运行二进制文件.
虽然.net框架是免费的,但它可能很麻烦,它可能会让很多用户离开,因为设置是20MB +并安装了几个文件/注册表项.
我基本上理解托管和本机代码的概念及其区别.但他们在技术上如何相互沟通呢?想象一下以下示例:
我得到了一些为特定平台编译的静态或动态c ++库.现在我编写一个Java程序.在这段代码中,我使用'native'关键字调用库函数.我用字节码构建一个jar文件,c ++库文件将保持独立.结果将不再是与平台无关的.
但java程序如何知道调用的本机方法是否存在?
整个programmcode在运行时是如何执行的?我知道字节码将用JIT解释或编译.
这一切如何适合沙盒范例?本机代码是否也在沙箱中执行?
它是否有效,因为(java和c ++)代码到底都是机器代码?
也许这是一个愚蠢的问题.但我一直在想......
编辑:我有3个很好的答案.真的无法决定哪个对我帮助最大.但我会将这个问题标记为已经回答,以便从我这边关闭这个话题.
.net ×4
c++ ×2
managed ×2
assembly ×1
bytecode ×1
c# ×1
c++-cli ×1
definition ×1
frameworks ×1
java ×1
machine-code ×1
native ×1
unmanaged ×1