Transmit_as和Represent_as

Transmit_as和represent_as共享相同的布局,但前导令牌除外;令牌读取FC_TRANSMIT_AS或FC_REPRESENT_AS,但基础代码很常见。

说明具有以下布局:

FC_TRANSMIT_AS | FC_REPRESENT_AS
flags<1>
quintuple_index<2>
presented_type_memory_size<2>
transmitted_type_buffer_size<2>
transmitted_type_offset<2>

标志<1> 字节由上一个标志小号和下部对齐键组成。

对齐键保持传输类型的线对齐。 当缓冲区大小调整和使用格式代码中传输的类型大小时,需要执行此操作。

标志小号可以具有以下标志:

#define PRESENTED_TYPE_IS_ARRAY     0x10
#define PRESENTED_TYPE_ALIGN_4      0x20
#define PRESENTED_TYPE_ALIGN_8      0x40

PRESENTED_TYPE_IS_ARRAY标志将顶级传输标记为 (或表示为) 参数,是某事物的数组并传递值。 –Oi 解释器使用此标志来单步执行此类参数 (实际上是堆栈上的指针,而不是数组) 。 另外两个标志也仅在以前的解释器中使用,以便正确单步执行堆栈上呈现的类型。

quintuple_index<2> 是回调例程五元的索引, (这实际上是函数的四倍) 。 该表通常表示为 和 传输,并且例程的位置有明显的映射,因为相同的入口点服务传输为 并表示为代码。 映射from_local => to_xmit,to_local => from_xmit,free_inst => free_xmit,free_local => free_inst。

presented_type_memory_size<2> 始终为呈现/本地类型提供大小,包括未知表示为类型。

当大小变化时,transmitted_type_buffer_size<2> 为零,或实际固定大小。 这是一种优化,允许在调整缓冲区大小时跳过某些回调。

transmitted_type_offset<2> 是传输的类型格式字符串的通常相对类型偏移量。