我正在研究.NET体系结构,但我不知道方法表存储在哪里。.NET程序集包含报表、类型元数据和CIL代码。方法表在类型元数据中吗?还是在堆里?
发布于 2022-08-17 04:18:59
这是来自20+年前的记忆。我一次就知道这件事的大部分。
当加载程序第一次决定需要一个类型时,它会将适当的程序集/模块加载到(本机)内存中的内存映射文件中。
然后,它通过清单和其他元数据读取类型元数据。此时,它构建方法表(和其他类型特定的goop)。它在某个地方的本地内存段中。
最初,方法表包含每个方法的存根。当调用存根时,将使JIT编译器将IL (驻留在程序集的内存映射文件中)编译为本机代码(驻留在本机内存段中)。这些方法按照调用的方式逐个编译JIT。
在这个过程中的某个地方,如果类型有一个静态构造函数,它就会被调用(规范说,在任何引用该类型的代码运行之前就会发生这种情况--我相信确切的时间已经改变了一次)。
我想指出的是,“哪里”并不重要,重要的是它的行为。
https://stackoverflow.com/questions/73382588
复制相似问题