虚函数(动多态)的处理流程

蓝咒 提交于 2020-02-04 15:42:12

多态: 同一接口 不同形态

1.静多态 编译阶段确定函数的调用(函数重载、模板)
2.动多态 运行时确定函数的接口(virtual触发、在运行时拿到函数的入口地址)
3.宏多态 预编译时确定函数的接口(很少涉及)
虚函数给予动多态支持

一个.cpp文件到一个.exe运行文件的过程:
1.编译
2.链接
3.运行

链接到运行过程中发生了什么?

备注:

  1. 符号表中存放的是函数的入口地址

  2. 在运行前所有的数据都是在磁盘上存储,运行时数据加载到内存中

1.合并段和合并符号表(所以在链接过后已经有了函数入口地址,但是此时的函数入口地址是存放在磁盘中的)
2.符号解析(把代码中的符号处理掉 在符号引用的地方找到符号定义的地方)
3.分配地址和空间
4.在text段进行符号的重定位
以Linux系统为例.o文件生成ELF文件格式
这样一来就实现了在运行时确定函数的接口,实现了动多态

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!