Lobsters | 原文链接 | 2026-09-06 收录

可视化 Rust 的虚表:dyn Trait 在内存里到底怎么工作

来源: sofiabelen.github.io — 2026-09-04

概述

一位 Rust 初学者用亲手实验探究 dyn Trait 与 C++ 虚函数在内存层面的差异,拒绝把 Rust 当成换了语法的 C++。文章带读者走一遍静态分发(monomorphization,对应 C++ 的 CRTP 思路)与动态分发(dyn Trait,对应虚函数),并意外发现零大小类型(ZST):空 struct 的尺寸是 0,因为 Rust 用所有权而非地址追踪身份,debug/release 下 ZST 的地址行为也因此不同。

核心要点

金句

In C++, the vtable pointer lives inside the object, adding overhead to every instance whether you use polymorphism or not. In Rust, the vtable pointer only appears when you explicitly use &dyn Trait or Box.
返回 Lobsters 首页