跳转到内容

鹦鹉虚拟机/Packfiles

来自 Wikibooks,开放世界中的开放书籍

Packfiles

[编辑 | 编辑源代码]

鹦鹉字节码文件在内部被称为“packfiles”。从 packfile 获取信息和向 packfile 提供信息的访问例程存储在 /src/packfile.c 中。

一些可能影响文件存储方式的事项是

  1. 字节序。有些计算机被称为“小端”,而有些计算机被称为“大端”。这与位在字节中排列的方式有关。没有选择其中一种作为默认值。
  2. 值大小。诸如指针和 INTVAL 之类的东西在不同的计算机上会有不同的尺寸。鹦鹉必须在这些值和其他值之间进行 16 位、32 位和 64 位值的转换。此外,FLOATVALS 可能为 32 位、64 位或 128 位,需要进行转换。

序列化

[编辑 | 编辑源代码]

HLL 代码最常用于首次编译它的计算机上。为此,鹦鹉经过优化,可以使用本地设置写入 packfiles。如果读取在其他计算机上创建的 packfile,鹦鹉必须在内部对其进行转换,以便它可以在您的计算机上运行。此转换过程会增加额外的执行开销,但只需要在您的计算机上运行一次即可将数据转换为正确的本地格式。

冻结和解冻

[编辑 | 编辑源代码]

序列化通过两个接口进行:冻结和解冻。冻结是将 PMC 或其他类型的数据转换为适合插入 packfile 的格式的过程。解冻是从 packfile 中读取数据并重新创建 PMC 或其他数据对象的过程。PMC 有可选的冻结和解冻 vtable 方法,虽然如果 PMC 不使用任何额外的存储,则可以使用良好的默认值。如果您使用额外的存储,特别是使用 malloc 从系统分配的存储,则必须提供自定义的冻结/解冻方法来存储和检索它。

华夏公益教科书