繁体   English   中英

Kotlin 本机指针初始化

[英]Kotlin Native Pointer initialization

我与 Kotlin Native 和运行时有点争执。 简而言之:我正在构建一个 jvmti 代理,链接一个动态库。

现在我有以下案例,我想实现的目标可以用 C 表示:

char* class_sig; 
(*jvmti)->GetClassSignature(object_klass, &class_sig, NULL) 
do something with class_sig.... 
(*jvmti)->Deallocate((unsigned char*) class_sig);

所以在那种情况下,jvmti 环境会为 class_sig 分配 memory,这就是我必须通过 jvmti 环境解除分配的原因。

Kotlin如何实现? 我对调用 nativeheap.alloc 有点犹豫,这不会导致 memory 泄漏,因为 jvmti 环境已经分配了 memory 吗?

或者我可以这样做:

val signaturePtr = nativeHeap.alloc<CPointerVar<ByteVar>>()
        
jvmti?.pointed?.pointed?.GetClassSignature?.invoke(jvmti, klass, signaturePtr.ptr, null)

Call jvmti dealloc?

Kotlin 本机方法是使用memScoped 来完成此类任务。 查看C 互操作的官方指南

如果你写

memScoped {
    val signaturePtr = alloc<CPointerVar<ByteVar>>()
    //...
}

Kotlin 将处理memScoped块内的 memory 释放,无需调用 jmti Deallocate

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM