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