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> 是传输的类型格式字符串的通常相对类型偏移量。