是否为字符串返回值提供JNA的空闲内存

问题描述 投票:0回答:1

我有这样的JNA接口:


interface JJ {
    String Hello(GoString.ByValue sql);
}

Go中相应的本机代码:


//export Hello
func Hello(ss string) *C.char {

    s := ss + " world"
    return C.CString(s)
}

本机代码返回指向字符串的指针。

JNA代码是否释放本机代码分配的字符串的指针?如果没有,如何释放它?

java go jna
1个回答
1
投票

我将回答一般性问题和具体示例。

JNA不会维护对本机内存的任何引用,除非您在JNA中自行分配(例如,定义要传递给函数的byte[]数组或Memory缓冲区)。在这些情况下,当垃圾回收Java对象时,将释放本机内存。

如果没有将任何内存传递给C来填充,JNA不会对本机内存做任何事情,并且您必须阅读API文档,以了解释放本机字符串的责任。

对于您的特定示例,the docs说:

Go的内存不知道由C代码进行的内存分配经理。使用C.CString(或任何C内存)创建C字符串时分配),您必须记住在完成后释放内存通过调用C.free来实现。

© www.soinside.com 2019 - 2024. All rights reserved.