簡體   English   中英

Kotlin 本機指針初始化

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM