C# 中类的代码(包括方法、属性等成员)的存储机制与 Objective-C 有显著差异,其核心依赖于 CLR(公共语言运行时)的方法表(Method Table)和虚拟方法表(vtable)机制,通过内存地址偏移实现高效调用。以下是具体原理和对比:
⚙️ 1. C# 类的代码存储机制
(1)方法表(Method Table)
- 核心结构:每个加载到内存的类在 CLR 中对应一个方法表,存储在 Loader Heap(加载器堆) 中。
- 内容组成:
- 类型元数据:如类型标识、父类指针、接口映射表等。
- 方法槽(Slots):存储类中所有方法(包括虚方法、非虚方法)的实际内存地址。
- 静态字段:静态变量的内存空间直接内嵌在方法表中。
- 内存布局示例:
┌───────────────────┐ │ Method Table │ ├───────────────────┤ │ Type Metadata │ → 类名、父类、接口等 ├───────────────────┤ │ vtable (Slots) │ → [Method1地址][Method2地址]... ├───────────────────┤ │ Static Fields │ → 静态变量存储区 └───────────────────┘
(2)对象实例与方法调用
- 对象头(Object Heade

最低0.47元/天 解锁文章
38

被折叠的 条评论
为什么被折叠?



