首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Storable类型类在Haskell中做什么?

Storable类型类在Haskell中做什么?
EN

Stack Overflow用户
提问于 2016-09-10 08:54:21
回答 1查看 395关注 0票数 11

我已经阅读了一些关于Haskell的C FFI的文档。我刚刚遇到了一个名为Storable的类型类,我不太理解它。

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

另外,单独的函数sizeOfalignmentpeekpoke有什么作用?似乎peekpoke用于从Ptr a指向的内存中的某个位置读取数据或将数据写入内存中的某个位置。是这样的吗?

但是我根本不知道sizeOfalignment是什么意思。有没有人能举例说明一下它们的用法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-10 09:01:28

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

序列化/反序列化是在poke/peek的帮助下进行的。sizeOf返回值的C表示形式的字节大小。请注意,这种机制只适用于具有固定大小的C表示的值(例如结构)。它不支持像C字符串这样的东西,它们被视为differently。至于alignment,它用于确保在Haskell域中完成的内存分配满足平台的对齐要求。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39421488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档