zoukankan      html  css  js  c++  java
  • 托管程序和非托管程序的区别

    一般的一个可执行文件的内容都包含一个PE头,系统根据PE的信息找到入口函数,通过执行入口函数中的代码来执行可执行程序。托管程序的文件相对于非托管程序还包含了一个CLR表头文件以及其他CLR需要的信息。

    1.非托管程序的执行过程

    在非托管程序中,可执行里面保存的是机器代码,CPU可以直接加载并执行,当系统加载了可执行程序后,系统就将可执行文件的段基址加上偏移地址形成实际的物理地址,并直接加载到内存中运行。

    2.托管程序的执行过程

    托管程序的可执行文件中,包括是中间语言以及元数据,当然不能直接运行,必须启动CLR,由CLR对中间语言进行即时编译机器代码,并加载到内存里面执行(具体过程“程序在进入入口函数前会提前跳转到MSCoree.dll中,调用它的代码来启动CLR并完成一些初始化工作)。当然,IL中的方法并不是每次被调用都会被编译一次,而是它只有在第一次调用时才进行编译,即时编译会将方法名称以及对应的入口存放在映射表中,当下次调用该方法时,会直接从映射表里去而不是再编译一次。

  • 相关阅读:
    centos 7.5 snmp 安装
    centos 7.5 telnet 离线安装
    使用httpClient发送请求(支持https)
    kafka基本概念
    List根据时间字符串排序
    mac安装yosys遇到`dyld: malformed mach-o image`报错
    ctags的--exclude选项
    每周分享(3)
    实践OKR极易出现的四大误区
    从OKR小白到成功落地OKR(三)
  • 原文地址:https://www.cnblogs.com/cheshui/p/2703313.html
Copyright © 2011-2022 走看看