首页 文章

可存储的类型类在Haskell中做了什么

提问于
浏览
11

我一直在阅读有关Haskell 's C FFI. And I' ve的一些文档,刚刚遇到一个名为 Storable 的类型类,我不太了解它 .

是这个类型类的实例,这些类型在与C代码接口时应该有一个“指针”吗?

个别功能 sizeOfalignmentpeekpoke 怎么办?似乎 peekpoke 用于从 Ptr a 指向的内存中读取数据或将数据写入 . 这是正确的吗?

但我不知道 sizeOfalignment 究竟是什么意思 . 有人可举例说明其用途吗?

1 回答

  • 10

    Haskell以与C非常不兼容的方式将值存储在内存中 . 因此,无法从haskell调用C函数并直接传递给它haskell值 . 相反,您必须创建值的副本,但不是精确副本,而是以C所理解的格式创建 . 这就是 Storable 所做的 . 因此,它基本上提供了将haskell值序列化为C友好格式的方法(例如,思考C结构) . 它还支持相反的操作,它可以反序列化值 . 当从haskell调用C函数并返回复数(即非原始)值时,这很有用 .

    序列化/反序列化在 poke / peek 的帮助下发生 . sizeOf 返回值的C表示的字节大小 . 请注意,此机制仅适用于具有固定大小的C表示的值(例如,结构) . 它不支持像C字符串这样的东西,它们被处理differently . 至于 alignment ,它用于确保在haskell土地上完成的内存分配满足平台的对齐要求 .

相关问题