托管与非托管
这里说说自己对托管和非托管的认识。
一:从字面上看,托管就是委托别人管理。就像你委托保姆做饭,打扫卫生等。你不用亲力亲为的去做,但是享受了这些服务。非托管嘛,就是你要亲力亲为了。是个很勤快的人,什么都得关心。
二:在.NET FRAMEWORK中,托管就是把事情留给CLR(公共语言运行时)去做,这个是CLR自己帮你做的,你根本不用关心。他帮你做了哪些呢?有类型安全检查,内存管理,垃圾回收等。你可能看到这些抽象的名字,不知道他做了什么。我这里只讲一下内存管理。你要是接触过C++,你可能知道,C++里有指针,他可以直接操作内存的。而在C#里,没有了指针,你不能直接操作内存,而是间接的。这个间接是怎么实现的呢?他就是通过CLR。什么是非托管呢?就是你自己去操作内存,不用CLR来插一脚。现在.net里的语言一般是托管语言,你在里面编程,编译后就成了托管模块。而C++是非托管语言。
三:但是托管模块中也可能有非托管的内容。非托管的内容,比如WINDOWS API,非托管COM等。你在.NET环境中,引用WINDOWS API,非托管COM,就会导致托管模块中有非托管模块了。
四:托管的内容,要通过CLR和windows交流。而非托管的内容可以直接和windows交流。