gpt4 book ai didi

haskell - 用外语管理分配内存的正确方法是什么?

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

我的情况很简单:我有一个 C++ 应用程序和一个 Haskell 库,我只需要从 Haskell 导出一个返回 C 字符串的函数。

问题是 C 字符串最初是 String ,并从中获取 C 字符串,我需要分配必须显式释放的存储空间(Haskell 的 freefinalizerFree ,正如 newCString 的文档所述)。

有什么好的方法来处理它?具体来说,我有几个考虑:

理想情况下,我想以某种方式让 Haskell 运行时 GC 处理该问题,但我不确定它如何知道何时以及何时不需要外方仍然需要内存。可能吗?

如果没有,我可以调用C的free吗?或者是 CString Haskell 运行时维护的存储?如果不是,我想我将不得不导出 Haskell 的 free以及从国外调用它,对吗?

最佳答案

您确实必须释放字符串:正如您所说,Haskell 的 GC 无法知道外部是否仍然需要它。

Haskell 的 free完全等价于 C 的 free .您可以从您喜欢的一侧调用任何一个。

free :: Ptr a -> IO ()
free = _free

foreign import ccall unsafe "stdlib.h free" _free :: Ptr a -> IO ()

我没有检查 Haskell 报告 + FFI 附录是否要求这样做,但我猜是这样。

关于haskell - 用外语管理分配内存的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28098870/

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