Kotlin本地指针初始化

xqkwcwgp  于 2022-12-13  发布在  Kotlin
关注(0)|答案(1)|浏览(174)

我与KotlinNative和运行时有一点冲突。简而言之:我正在构建一个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分配内存,这就是为什么我必须通过jvmti环境释放内存。
如何在Kotlin中实现这一点呢?我对调用nativeheap.alloc有点犹豫,因为jvmti环境已经分配了内存,这不会导致内存泄漏吗?
或者我可以只做:

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

Call jvmti dealloc?
ztyzrc3y

ztyzrc3y1#

KotlinNative方法是使用memScopedblocks来完成这样的任务。
如果你写

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

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

相关问题