【发布时间】:2022-12-19 14:38:58
【问题描述】:
我与 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 分配内存,这就是我必须通过 jvmti 环境解除分配的原因。
这在 Kotlin 中如何实现?我对调用 nativeheap.alloc 有点犹豫,这会不会导致内存泄漏,因为 jvmti 环境已经分配了内存?
或者我可以这样做:
val signaturePtr = nativeHeap.alloc<CPointerVar<ByteVar>>()
jvmti?.pointed?.pointed?.GetClassSignature?.invoke(jvmti, klass, signaturePtr.ptr, null)
Call jvmti dealloc?
【问题讨论】:
标签: kotlin kotlin-multiplatform kotlin-native