.Net8的JIT是如何计算函数内存空间大小的?

💡 原文中文,约2500字,阅读约需6分钟。
📝

内容提要

本文以.Net8的JIT第一个加载的C#函数StelemRef为例,介绍了在.Net8 PreView3中如何分配内存空间的大小。通过分析StelemRef函数的IL代码、本地变量、call调用和机器码,得出StelemRef函数分配的内存空间大小为0x88个字节。

🎯

关键要点

  • 内存空间是程序的灵魂,本文以.Net8的JIT加载的C#函数StelemRef为例。
  • StelemRef函数的C#原型包含三个参数和五个本地变量。
  • StelemRef函数的IL代码中有8个call调用,这些都是分配内存空间的必要元素。
  • 本地变量占用的空间为28个字节,8个call占用的空间为56个字节。
  • 在call之间预留了8字节和44字节的空间。
  • 最终计算得出StelemRef函数分配的内存空间大小为0x88个字节。
  • 机器码中显示分配的内存空间为0x88,符合之前的计算结果。
➡️

继续阅读