动态联编
动态联编/动态绑定(Dynamic Binding,又称迟绑定、晚期绑定 Late Binding)是指将函数调用与具体要执行的函数实现代码进行关联的过程,推迟到了程序运行时(Runtime)才进行,而不是在编译阶段确定。
它是面向对象编程中实现运行时多态(Polymorphism)的核心机制。
3 个核心要素
- 发生时机:程序运行时
编译器在编译期只知道调用的接口签名,不知道真正执行哪段代码。程序运行到该行时,系统会根据指针或引用所指向的具体实际对象类型,去查找并执行对应的重写方法。 - 底层实现:虚函数表(vtable)机制
以 C++ 为例,每个含有虚函数的类都有一张虚函数表,每个对象内存头部包含一个虚表指针(vptr)。调用虚函数时,代码会通过vptr -> vtable -> 函数指针的间接寻址来定位目标代码。 - 利弊权衡:灵活性 vs 性能开销
- 优点:大幅提升代码扩展性与解耦能力,实现统一接口、不同行为。
- 代价:相比静态联编(直接 call 绝对地址),动态联编多了一次指针间接寻址,且无法进行内联(inline)优化,存在极小的运行时性能和内存开销。
对比一览
| 维度 | 静态联编(Early Binding) | 动态联编(Late Binding) |
|---|---|---|
| 确定时机 | 编译期 / 链接期 | 程序运行期 |
| 典型场景 | 普通函数调用、函数重载、模板 | 虚函数(virtual)、接口方法覆盖 |
| 执行效率 | 极高(直接跳转,支持内联) | 略低(查虚表间接调用) |
| 支持多态 | 编译期静态多态 | 运行期动态多态 |

浙公网安备 33010602011771号