C++应用程序性能优化——程序的启动过程

本文详细介绍了C++程序的启动过程,包括链接时和加载时的重定位,以及程序的加载、编译链接和启动阶段。讨论了影响启动性能的因素,如IO操作、DLL符号表处理和磁盘碎片,并提出了优化启动过程的方法,如减少动态库数量、优化代码布局和延迟初始化等。
摘要由CSDN通过智能技术生成

1. 重定位:

链接时重定位:

目标文件一般由多个节组成,编译器在编译每个目标文件时一般都是从0地址开始生成代码。当多个代码节合成一个代码段时,需要根据其在最终代码段中的位置做出调整。同时,链接器需要对已经解析的符号分配运行时地址。这个过程就是重定位。

 

加载时重定位:

程序中可能调用了DLL,由于EXE是最先被加载的,所以一般都能加载到其想要的内存地址上;而DLL的加载一般在EXE之后,就需要对DLL中的地址进行重定位了。

 

2. 程序的启动过程

WIN32程序启动过程包括:

(1) 操作系统把程序加载到内存,并建立相应的运行环境

(2) 应用程序自身的初始化过程

备注:应用程序必须符合PE格式,主要包含:data(数据段),.text(代码段)。数据和代码加载到内存中后,CPU从程序入口处按顺序取出每一条指令并执行

内存中,应用程序的代码表现为一系列有序的指令集。

 

加载器:操作系统加载器的任务是,把磁盘中可执行程序的物理文件读入内存,并转换成程序在内存中的表示。

 

3. 编译链接和启动

编译链接:

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值