杂项
类型
内省 introspector
(查看(类、函数等)内部情况)
Koffi 2.0 中的新功能:koffi.resolve()
、Koffi 2.2 中的新功能:koffi.offsetof()
返回的值在版本 2.0 和版本 2.2 中introspect()
发生了变化。
在 Koffi 1.x 中,它只能与结构类型一起使用,并返回传递给 koffi.struct() 的对象以及成员名称和类型。
从 Koffi 2.2 开始,每个记录成员都作为一个对象公开,其中包含名称、类型和记录内的偏移量。
有关更多信息,请参阅迁移指南。
用于koffi.introspect(type)
获取有关类型的详细信息:名称、基元、大小、对齐方式、成员(记录类型)、引用类型(数组、指针)和长度(数组)。
Koffi 还公开了更多实用函数来获取此信息的子集:
koffi.sizeof(type)
获取类型的大小koffi.alignof(type)
获取类型的对齐方式koffi.offsetof(type, member_name)
获取记录成员的偏移量koffi.resolve(type)
从类型字符串中获取已解析的类型对象
就像以前一样,您可以通过名称或通过以下方式koffi.types
引用原始类型:
别名 Aliases
Koffi 2.0 中的新功能
您可以使用koffi.alias(name, type)
为类型别名。别名类型是完全等价的。
设置
内存使用情况
对于同步/普通调用,Koffi 使用两个预分配的内存块:
用于构造 C 堆栈并分配寄存器,随后由特定于平台的汇编代码使用(默认情况下为 1 MiB)
用于分配字符串和大对象/结构(默认为 2 MiB)
除非使用非常大的字符串或对象(至少超过一页内存),否则 Koffi 在调用或回调期间不会直接分配任何额外的内存。但是,请注意 JS 引擎 (V8) 可能会这样。
这些预分配块的大小(以字节为单位)可以更改。用于koffi.config()
获取具有设置的对象,并koffi.config(obj)
应用新设置。
异步调用也是如此。当进行异步调用时,Koffi 将分配新块,除非仍有未使用(常驻)的块集可用。异步调用完成后,如果周围剩下的块超过 resident_async_pools 组,这些块将被释放。
同一时间不能运行超过 max_async_calls 个异步调用。
默认设置
sync_stack_size
1 MiB
Stack size for synchronous calls
sync_heap_size
2 MiB
Heap size for synchronous calls
async_stack_size
256 kiB
Stack size for asynchronous calls
async_heap_size
512 kiB
Heap size for asynchronous calls
resident_async_pools
2
Number of resident pools for asynchronous calls
max_async_calls
64
Maximum number of ongoing asynchronous calls
max_type_size
64 MiB
Maximum size of Koffi types (for arrays and structs)
使用统计
Koffi 2.3.2 中的新功能
您可以用来koffi.stats()
获取一些与 Koffi 相关的统计数据。
POSIX 错误代码
Koffi 2.3.14 中的新功能
您可以使用koffi.errno()
获取当前 errno 值并koffi.errno(value)
更改它。
标准的 POSIX 错误代码可在 中找到koffi.os.errno
,如下所示
重置内部状态
Koffi 2.5.19 中的新功能
您可以使用koffi.reset()
清除一些 Koffi 内部状态,例如:
解析器类型名称
异步函数代理(
jest --detectOpenHandles
有助于避免误报)
此函数主要用于测试代码,当您一遍又一遍地执行相同的代码并且需要重用类型名称时。
尝试使用在重置之前定义的函数或类型是未定义行为,很可能会导致崩溃!
Last updated