gpt4 book ai didi

haskell - Haskell 中的 Storable 类型类有什么作用

转载 作者:行者123 更新时间:2023-12-04 02:09:25 27 4
gpt4 key购买 nike

我一直在阅读有关 Haskell 的 C FFI 的一些文档。我刚刚遇到了一个名为 Storable 的类型类。 ,我不是很明白。

这个类型类的实例,这些类型在与 C 代码交互时应该有一个指向它们的“指针”吗?

还有个别功能有什么作用sizeOf , alignment , peek , poke做?看来peekpoke用于从 Ptr a 指向的内存位置读取数据或向其中写入数据.这是正确的吗?

但是不知道是什么sizeOfalignment根本意思。有人可以举例说明它们的用途吗?

最佳答案

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

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

关于haskell - Haskell 中的 Storable 类型类有什么作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39421488/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com