[英]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.