gpt4 book ai didi

haskell - 什么是 Addr# 类型,如何使用它?

转载 作者:行者123 更新时间:2023-12-01 07:13:13 26 4
gpt4 key购买 nike

当我发现 Addr# 时,我最近一直在寻找各种 Haskell 怪癖,比如未装箱类型等等类型。

GHC.Prim 包是这样描述的:

An arbitrary machine address assumed to point outside the garbage-collected heap.



这对我来说意义不大。

此外,我一直在寻找使用以下类型的函数:
readIntOffAddr# :: Addr# -> Int# -> State# s -> (#State# s, Int##)

这是什么类型?我能用它做什么?为什么有必要?

最佳答案

作为对迈克尔回答的补充:
Addr#Ptr a 基础的未装箱类型同 Int#Int 基础的未装箱类型.它的内容可能被解释为机器地址,尽管就编译器和 GC 而言,它只是另一种整数类型(无论相关系统上的指针大小如何)。由于它是任意机器地址而不是 GC 管理的指针,因此它不应该指向 Haskell 堆,因为从 Haskell 级别来看,Haskell 堆对象的地址是不稳定的(GC 可能发生在您的程序,然后您的Addr# 指向的任何对象现在都存在于其他地方,或者根本不存在)。

通常是 Ptr a/Addr#将包含一个从 malloc 返回的指针/mmap/etc.,或者指向 C 全局变量的指针,或者一般来说,指针可能在 C 程序中合理指向的任何类型的东西。您通常会使用 readIntOffAddr#当与返回或修改传递的 HsInt * 的内容的 C 函数交互时. (好吧,您不会直接使用它,而是使用 IntpeekElemOff Storable 方法,我认为该方法是根据 readIntOffAddr# 实现的,或者您将使用更高级别的函数,例如peekArray)。

关于haskell - 什么是 Addr# 类型,如何使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32529812/

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