gpt4 book ai didi

python - 外部函数 : who deallocates memory?

转载 作者:IT王子 更新时间:2023-10-29 01:01:26 25 4
gpt4 key购买 nike

我正在从 Python 调用 Go 函数。 Go 函数返回一个字符串,具体来说,是一个 GoString,字符串本身是在 Go 端分配的。

问题

谁负责释放此内存?


下面是一个非常简化的示例。

走一边:

func Create(optsEncoded string) (res string, serr string) {
opts := map[string]interface{}{}
if err := json.Unmarshal([]byte(optsEncoded), &opts); err != nil {
return "", errWithStack(err)
}
options := translateCreateOptions(opts)

result := ...

payload, err := json.Marshal(result)
if err != nil {
return "", errWithStack(err)
}
return string(payload), ""
}

Cython 绑定(bind):

cpdef object py_create(object items, bytes options):
cdef GoString opts = ...
cdef bytes message

cdef Create_return result = Create(opts)

if result.r0.n == 0:
message = result.r1.p
raise Exception("Something happened")
message = result.r0.p
# Do I need to deallocate result.r0 and result.r1?
return message.decode("utf-8")

最佳答案

我认为你不应该将 GoString 返回给 C。因为 GoString 的内存由 go 运行时管理,并且将被垃圾收集。在 C 地使用这个字符串是不可靠的。您应该做的是通过调用 cs := C.CString(s) 返回一个 CString。 Go 的内存管理器不知道由 C 代码进行的内存分配。所以我认为由您来决定释放 CStringhere 的哪一方和 here .

关于python - 外部函数 : who deallocates memory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48497879/

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