我与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?
1条答案
按热度按时间ztyzrc3y1#
KotlinNative方法是使用
memScoped
blocks来完成这样的任务。如果你写
Kotlin将处理
memScoped
块内的内存释放,无需调用jmti Deallocate