动态联编

动态联编/动态绑定(Dynamic Binding,又称迟绑定、晚期绑定 Late Binding)是指将函数调用与具体要执行的函数实现代码进行关联的过程,推迟到了程序运行时(Runtime)才进行,而不是在编译阶段确定。

它是面向对象编程中实现运行时多态(Polymorphism)的核心机制。


3 个核心要素

  • 发生时机:程序运行时
    编译器在编译期只知道调用的接口签名,不知道真正执行哪段代码。程序运行到该行时,系统会根据指针或引用所指向的具体实际对象类型,去查找并执行对应的重写方法。
  • 底层实现:虚函数表(vtable)机制
    以 C++ 为例,每个含有虚函数的类都有一张虚函数表,每个对象内存头部包含一个虚表指针(vptr)。调用虚函数时,代码会通过 vptr -> vtable -> 函数指针 的间接寻址来定位目标代码。
  • 利弊权衡:灵活性 vs 性能开销
  • 优点:大幅提升代码扩展性与解耦能力,实现统一接口、不同行为。
  • 代价:相比静态联编(直接 call 绝对地址),动态联编多了一次指针间接寻址,且无法进行内联(inline)优化,存在极小的运行时性能和内存开销。

对比一览

维度 静态联编(Early Binding) 动态联编(Late Binding)
确定时机 编译期 / 链接期 程序运行期
典型场景 普通函数调用、函数重载、模板 虚函数(virtual)、接口方法覆盖
执行效率 极高(直接跳转,支持内联) 略低(查虚表间接调用)
支持多态 编译期静态多态 运行期动态多态
posted @ 2026-09-10 14:42  光風霽月  阅读(8)  评论(0)    收藏  举报