我一直在阅读有关Haskell的C FFI的一些文档。我刚刚遇到一个名为的类型类 Storable
,我不太了解。
是这个类型类的实例,这些类型在与C代码连接时应该有一个“指针”吗?
个人的功能也是什么 sizeOf
, alignment
, peek
, poke
做?它似乎 peek
和 poke
用于从数据库读取数据或将数据写入指向的内存中的位置 Ptr a
。这是正确的吗?
但我不知道是什么 sizeOf
和 alignment
意思是说。有人可举例说明其用途吗?
Haskell以与C非常不兼容的方式将值存储在内存中。因此,无法从haskell调用C函数并直接传递给它haskell值。相反,你必须创建一个值的副本,但不是一个精确的副本,而是一个C理解的格式。那是什么 Storable
确实。因此,它基本上提供了将haskell值序列化为C友好格式的方法(例如,思考C结构)。它还支持相反的操作,它可以反序列化值。当从haskell调用C函数并返回复数(即非原始)值时,这很有用。
序列化/反序列化在...的帮助下发生 poke
/peek
。 sizeOf
返回值的C表示的字节大小。请注意,此机制仅适用于具有固定大小的C表示的值(例如,结构)。它不支持像C字符串这样的东西,它们会得到处理 不同。至于 alignment
,它用于确保在haskell土地上完成的内存分配满足平台的对齐要求。
Haskell以与C非常不兼容的方式将值存储在内存中。因此,无法从haskell调用C函数并直接传递给它haskell值。相反,你必须创建一个值的副本,但不是一个精确的副本,而是一个C理解的格式。那是什么 Storable
确实。因此,它基本上提供了将haskell值序列化为C友好格式的方法(例如,思考C结构)。它还支持相反的操作,它可以反序列化值。当从haskell调用C函数并返回复数(即非原始)值时,这很有用。
序列化/反序列化在...的帮助下发生 poke
/peek
。 sizeOf
返回值的C表示的字节大小。请注意,此机制仅适用于具有固定大小的C表示的值(例如,结构)。它不支持像C字符串这样的东西,它们会得到处理 不同。至于 alignment
,它用于确保在haskell土地上完成的内存分配满足平台的对齐要求。